这是一个学习Git 用于测试的项目,所需软件
- 命令行 - Git客户端 http://www.git-scm.com/download/
- 图形化界面 - TortoiseGit http://download.tortoisegit.org/tgit/
另外,关于文档说明文件,如readme.md文件,详情参看 Markdown 语法说明。
在使用之前建议先大体了解一下git的相关基础:
如果学习使用并测试项目,请使用示例 Webtest 来测试学习。
不要用正在线运营的项目
之前以下链接失效,更新下面的链接到官网中文版(2017-02-17)
- Git详解-目录
- Git详解之一 Git起步
- Git详解之二 Git基础
- Git详解之三 Git分支
- Git详解之四 服务器上的Git
- Git详解之五 分布式Git
- Git详解之六 Github
- Git详解之七 Git工具
- Git详解之八 自定义Git
- Git详解之九 Git与其他系统
- Git详解之十 Git内部原理
- Appendix A: 其它环境中的 Git
- Appendix B: 将 Git 嵌入你的应用
- Appendix C: Git 命令
Git 常用命令图表——思维导图-Git.png
还可以参考一个比较全的教程Git教程
首先了解一些命令,方便操作使用,下面提供一些命令行中常用的文件/文件夹操作命令:
创建:mkdir .ssh
修改:mv .ssb .ssh
删除:rm -rf .ssh
创建文件:touch README.md
输出文本:cat id_rsa.pub
使用ssh加密实现与github网站的关联,避免每次同步都需要填写帐户密码,首次产生一个ssh key:
cd ~/.ssh
// 如果没有.ssh目录,则自己新建此目录即可,如下
// cd ~/
// mkdir .ssh
// cd .ssh
ssh-keygen -t rsa //直接 N 次回车即可,默认名为id_rsa,不用修改即可
#
设置关联(复制上面产生的key——id_rsa.pub中代码——全选即可)
不同的操作系统,均有一些命令,直接将SSH key从文件拷贝到粘贴板中,如下:
mac
pbcopy < ~/.ssh/id_rsa.pub
# Copies the contents of the id_rsa.pub file to your clipboard
windows
clip < ~/.ssh/id_rsa.pub
# Copies the contents of the id_rsa.pub file to your clipboard
linux
sudo apt-get install xclip
# Downloads and installs xclip. If you don't have `apt-get`, you might need to use another installer (like `yum`)
xclip -sel clip < ~/.ssh/id_rsa.pub
# Copies the contents of the id_rsa.pub file to your clipboard
在github网站setting中找到Add SSH Keys,添加复制的内容即可。
如此即关联完毕,如此在之后与github网站的push、pull操作则不用再输入github帐户密码了,非常方便。
可以使用下面的命令测试下:
$ssh -T git@github.com
然后会提示你输入密码,输入完成后,会显示在GitHub上的用户名。
第一次使用git,一般需要设置全局config,如下:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
第一次使用git push时,会提示设置git config --global push.default 将其设置为simple就行了,如下:
git config --global push.default simple //你可以直接如此设置,不必等操作遇到才设置
以上配置完毕,就可以clone一个远程项目了,下面会给出一个完整详细的git项目操作示例,在文末还会将命令行示例中的常用命令做一汇总列表,方便查阅参考。
GIt命令行模式操作项目的详细步骤示例(此处以Git测试项目为例详解)
为了方便练习,确保有各种的权限操作,你可以fork一个git测试项目webtest,之后操作的时候把路径换成自己的就行了。
首先把项目克隆到本地(注意要选择项目目录,别clone到之前的.ssh目录下了)
//在项目目录右键选择Git Bash
Jack@ALICE /E/git
$ git clone git@github.com:pandoraui/webtest.git //(注意选择项目目录,此处我们以E:/git文件夹为例)
cd
$ cd webtest //操作需要在项目文件夹内,不然直接进行git命令操作时,会提示错误
下面我们对内部文件进行及提交(更详细的基础操作,请参看Git基础)
git status //查看文件当前处于什么状态
git commit -a -m "edit intro" //添加、修改以及合并提交
git push 推送到远程分支(github网站/Git服务器上),第一次操作新分支时,系统会提示远程没有当前testing分支,并提示操作方法新建远程分支,如下:
fatal: The current branch dev has no upstream branch.
To push the current branch and set the remote as upstream,
git push --set-upstream origin dev
cloudyan@IT0101 /E/wamp/www/webframe/cnBootstrap (dev)
$ git push --set-upstream origin testing //把新建的本地分支推送到远程
git pull //从远程分支下拉更新(从默认的当前远程分支),直接merge合并到当前项目中
git pull git@github.com:other/useGit.git //从其他项目链接合并更新
管理分支
git branch testing //新建分支
git checkout testing //切换分支
git checkout master //切换回主干
git checkout -b testing //新建分支并切换过去
相当于执行下面这两条命令:
git branch testing
git checkout testing
修改分支testing后合并到主干
git checkout master //首先切换到主干
git merge testing //合并分支testing
git branch --list //查看分支,新建了分支并切换成功同时与远程分支建立了联系
合并后,testing分支完成历史使命,就可以删掉了
git branch -d testing //此时如果此之前已经将此分支推送到了远程,那么本地分支删除,远程github网站上还是有此分支的。
如果在合并git merge testing的时候,出现了下面的错误提示
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
产生了冲突,可以git status(逻辑上说,这种问题只能由人来裁决。)
解决完冲突,执行merge添加、修改以及合并提交命令即可。
//本地分支删除后,下面删除远程分支testing
git push origin :testing
如此,这些命令能满足最常用的git操作。
如果你不喜欢Git命令行,那么你可以在安装以上软件后,使用图形化软件TortoiseGit来管理,TortoiseGit 是 TortoiseSVN的Git版,它很好的实现了与windows资源管理器的融合,使用界面与TortoiseSVN 非常类似。
安装好 TortoiseGit (有中文包的) 后,需要如下操作,但首先你要了解一点:
TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。也就是说使用ssh-keygen -C "username@email.com" -t rsa产生的密钥在TortoiseGit中不能用。而基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。
如此,就需要在TortoiseGit中也要设置与github网站的关联。
具体操作如下:
运行TortoiseGit开始菜单中的puttygen程序,点击“Generate”按钮,鼠标在其软件界面中的空白地方来回移动直到进度条完毕,就会自动生一个随机的key。保存public key(此需要添加到github网站上) 和private key(此后缀为.ppk,后面要用)
在github网站上添加key操作Git key的添加,除此之外,需要右键指定具体的项目,选择TortoiseGit->Settings,设置Remote 其Putty即为上面保存的.ppk文件。麻烦之处是针对每个项目初次都要设置remote中的.ppk的路径。(参看更详细 TortoiseGit配置说明 3.4这一段—— 建立沟通远程版本库与TortoiseGit的联系)
事实上,在clone一个新项目时,可以使用图形化界面,其中有一项便是加载putty密钥,选择密钥的路径即可,如 C:\Users\Jack.ssh\pandora.ppk 如此,之后在该项目的右键settings-remote处便已经添加了密钥路径,效果同上操作。
如此之后便可以无障碍使用图形化界面上传下拉git项目了。
如有疑问可以加QQ群:187260298 咨询讨论,Good Luck !
-
在clone一个项目后做git命令操作时,出现下面错误解决办法:
fatal: Not a git repository (or any of the parent directories): .git
**解决办法:**你得进入你的工作目录下,然后再git status 或者其它命令就没问题了。
如果远程已经有了分支,请使用章节(从主干下拉分支并关联分支)的命令
cloudyan@IT0101 /E/wamp/www/webframe/cnBootstrap (master)
$ git branch dev //新建分支
$ git checkout dev //切换分支
$ git branch --list //本地切换至新分支,但此时新分支并未在远程(github网站)新建
* dev
gh-pages
master
如果远程没有此分子,那么当你操作push命令时,
$ git push // 常规操作,系统会提示远程没有当前dev分支,并提示操作方法新建远程分支
fatal: The current branch dev has no upstream branch.
To push the current branch and set the remote as upstream,
git push --set-upstream origin testing
cloudyan@IT0101 /E/git/webtest (testing)
$ git push --set-upstream origin testing // 设置远程分支
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:pandoraui/webtest.git
* [new branch] testing -> testing
Branch dev set up to track remote branch dev from origin.
cloudyan@IT0101 /E/git/webtest (testing)
$ git branch --list //查看分支,新建了分支并切换成功同时与远程分支建立了联系
* testing
master
新建并关联成功
针对远程已经新建了分支, 在本地如何关联远程的分支
cloudyan@IT0101 /E/git/webtest (master)
$ git fetch origin
// 如果你的命令无效,我在win8中使用1.8.3就上述命令执行无效,
// 可以使用 git checkout -t 本地分支名 远程分支名,如:
// git checkout -t v4 origin/v4 //v3项目中的分支v4,分支名同则可省略,如:git checkout -t origin/gh-pages
// 使用 git branch -r可以查看远程分支
cloudyan@IT0101 /E/git/webtest (master)
$ git checkout dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'
cloudyan@IT0101 /E/git/webtest (testing)
$ git branch --list
* testing
master
关联并操作成功
这里是git命令行操作最常用的操作命令以及说明,如下:
git status //查看修改了什么
git add . //跟踪修改的文件.代表当前文件夹(间接代表当前目录所有文件),也可以用指定的文件
git commit -m "简单的注释,修改了什么" //注意git对中文的支持不太友好,暂未提供优化方法
git push //提交到远程分支(github网站上),如果远程没有此分支,系统会提示如何操作,命令如下:
git push --set-upstream origin proname //对应远程的项目名称proname
git pull //从远程分支更新(从默认项目分支)
git pull git@github.com:other/useGit.git //从其他项目分支合并更新
git branch testing //新建分支
git checkout testing //切换分支
git checkout master //切换回主干
git checkout -b testing //新建分支并切换过去
相当于执行下面这两条命令:
git branch testing
git checkout testing
修改分支testing后合并到主干
git checkout master //首先切换到主干
git merge testing //合并分支testing
合并后,testing分支完成历史使命,就可以删掉了
git branch -d testing
如果在合并git merge testing的时候,出现了下面的错误提示
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
产生了冲突,可以git status(逻辑上说,这种问题只能由人来裁决。)
如果想新建分支等,可以参看 Git详解之三 Git分支
用的多了就熟练了,Git命令行确实很简单而且功能十分强悍!建议多用用命令行模式。