Github

安装配置

Install client msysgit

github是服务端,要想在自己电脑上使用git我们还需要一个git客户端,我这里选用msysgit,这个只是提供了git的核心功能,而且是基于命令行的。
如果想要图形界面的话只要在msysgit的基础上安装TortoiseGit即可。

msysgit是Windows版的Git,从 http://msysgit.github.io/ 下载,然后按默认选项安装即可。 安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功了。

Congiure git

spreading为例

Create ssh key
ssh-keygen -t rsa -C your_email@youremail.com  

Example

ssh-keygen -t rsa -C navicester@qq.com

后面的 your_email@youremail.com 改为自己的邮箱,之后会要求确认路径和输入密码,这里使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,打开 id_rsa.pub,复制里面的 key,回到 github,进入 settings,左边选择 SSH keys,Add SSH Key,title 随便填,粘贴 key。

Verify ssh key
ssh -T git@github.com  
ssh -T -v git@github.com 可以打印debug信息

如果是第一次的会提示是否 continue,输入 yes 就会看到:You've successfully authenticated, but GitHub does not provide shell access,这就表示已成功连上 github。

常见问题1:关于ssh连接主机,git连接github失败的问题

创建仓库 New repository

github上点击右上角加号,选择 New repository

Note : 163账号被封

Git 基本操作

创建项目

git init

添加远程地址

git remote add origin git@github.com:navicester/spreading.git

获取项目

克隆到本地 (spreading)

我们要做的就是把 github 上面建立的仓库克隆到本地,在此之前还需要设置 username 和 email,因为 github 每次 commit 都会记录他们。

git config --global user.name your name  
git config --global user.email your_email@youremail.com  

Example

git config --global user.name navicester
git config --global user.email navicester@qq.com

git clone git@github.com:navicester/spreading.git

需要注意的是:github 提供了 3 种 url 路径(HTTPS,SSH,Subversion),一般如果账号处于登录状态,那么我们可以用 SSH,就像上面的代码,如果没有登录的话,只能用 HTTPS 的 url 了

直接修改.git/config
[core]
 repositoryformatversion = 0
 filemode = false
 bare = false
 logallrefupdates = true
 symlinks = false
 ignorecase = true
 hideDotFiles = dotGitOnly
[remote "origin"]
 url = git@github.com:navicester/lwc.git
 fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
 remote = origin
 merge = refs/heads/master
[remote "heroku"]
 url = https://git.heroku.com/lwc-ws.git
 fetch = +refs/heads/*:refs/remotes/heroku/*

基本快照

Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。本章将对有关创建与提交你的项目的快照的命令作介绍。

我们可以修改克隆到本地的项目,修改完成后先要 add 修改的文件(. 表示全部),然后填写 commit,最后在 push 到 github。

git push <远程主机名> <本地分支名>:<远程分支名>
git push https://git.oschina.net/beckwen/WinFingerprintDriver.git LocalBin:wk

git add .
git commit -m 'update'
git push [origin master]
git add
git status
git diff
git commit
git reset HEAD
git rm
git mv
如何撤销(add)文件修改和版本回退
放弃对git管理的文件修改

git checkout bb.txt

git放弃对当前文件夹的所有文件的修改?

git checkout .

放弃对没有被git管理的文件修改

如果是撤销所有的已经add的文件:

git reset HEAD .

如果是撤销某个文件或文件夹:

git reset HEAD -filename
如何撤销commit
git reset --hard <commit_id>
git push origin HEAD –force

其他:

根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:    
git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息    
git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可    
git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容    
HEAD 最近一个提交    
HEAD^ 上一次    
<commit_id> 每次commit的SHA1值. 可以用git log 看到,也可以在页面上commit标签页里找到.
  

git 支持中文

git config –global core.quotepath false

或者在~/.gitconfig中加入这句也可以

[core]
quotepath = false
Pull
git pull <远程主机名> <远程分支名>:<本地分支名>

git pull username@ipaddr:远端repository名 <远端分支名> <本地分支名> 
或者是:
git pull origin <远端分支名> <本地分支名>

git pull https://git.oschina.net/beckwen/WinFingerprintDriver.git wk:LocalBin

这条命令将从远端git库的远端分支名获取到本地git库的一个本地分支中。其中,如果不写本地分支名,则默认pull到本地当前分支。

  1. 运行时碰到错误 > D:\eclipse-workspace\virtualdir\lwc_test\lwc>git push
    ......
    To git@github.com:navicester/lwc.git
    ! [rejected] master -> master (non-fast-forward)
    error: failed to push some refs to 'git@github.com:navicester/lwc.git'
    hint: Updates were rejected because the tip of your current branch is behind
    hint: its remote counterpart. Integrate the remote changes (e.g.
    hint: 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Issue : updates were rejected because the tip of your current branch is behind its remote counterpart

有如下几种解决方法:

1.使用强制push的方法:

$ git push -u origin master -f 

这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

2.push前先将远程repository修改pull下来

$ git pull origin master
$ git push -u origin master

3.若不想merge远程和本地修改,可以先创建新的分支:

$ git branch [name]

然后push

$ git push -u origin [name]

gitignore

比如我要忽略sumlime项目文件 lwc.sublime-project lwc.sublime-workspace

touch .gitignore #创建gitignore隱藏文件  
vim .gitignore #编辑文件,加入指定文件 
#下面是我的gitignore文件的内容  
#忽略gitignore文件  
.gitignore  
#忽略后缀缀名为.o和.a的文件  
*.[oa]  
#或有sublime项目文件  
lwc.sublime-project
lwc.sublime-workspace

Git 查看提交历史

git log

分支管理 branch

查看分支

查看所有分支

git branch -a

查看本地分支

git branch

查看远程分支

git branch -r
git branch --remote

没有参数时,git branch 会列出你在本地的分支。
当你执行 git init 的时候,缺省情况下 Git 就会为你创建"master"分支。
如果我们要手动创建一个分支。执行 git branch (branchname) 即可。
加上-a参数可以查看远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话)

创建分支

git branch (branchname)

创建远程分支(本地分支push到远程):

git push origin [name]

切换分支

git checkout (branchname)
git checkout -b (branchname)

删除分支

删除本地分支
git branch -d (branchname)

删除本地分支,首先切换到别的分支,然后才能删除某个分支

-d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

删除远程的Git分支
git push origin --delete (branchname)

或者

git push origin :heads/[name]

分支合并

合并本地分支
git merge
git merge b

假设当前分支为dev,上面的命令就是将本地的b分支代码合并到当前分支dev中

合并远程分支

合并远程分支,和前面的几乎一样,

git merge origin/b  

远程分支b被合并到本地当前分支dev中了。

重命名本地分支

git branch -m oldname newname

重命名远程分支

在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。

push本地分支代码到远端服务器

git push origin branch_name  

如果远端服务器没有该分支,将会自动创建

pull远端分支代码到本地对应分支

git pull origin branch_name  

remote

remote server/remote repository/remote branch local repository/local branch

master就是local branch,origin/master是remote branch(master is a branch in the local repository. remotes/origin/master is a branch named master on the remote named origin) 需要注意的是,remotes/origin/master和origin/master的指向是相同的

git remote -v

log

D:\eclipse-workspace\git_python_spreading\spreading>git remote -v
origin git@github.com:navicester/spreading.git (fetch)
origin git@github.com:navicester/spreading.git (push)

克隆指定分支

git clone -b 分支名仓库地址

SAE Git代码部署说明

用户名 SAE安全邮箱 密码 SAE安全密码

在你应用的git代码目录里,添加一个新的git远程仓库 sae

$ git remote add sae https://git.sinacloud.com/papillon

编辑代码并将代码部署到 sae 的版本1。

$ git add .
$ git commit -am "make it better"
$ git push sae master:1

$ git pull sae 2

SAE支持Git、SVN、代码打包上传三种提交方式,具体请参考:http://www.sinacloud.com/doc/sae/tutorial/code-deploy.html#git

评论