日常使用git,一般只需掌握add、commit、checkout、reset、branch、merge、push几个基本操作即可。
这里有一个git教程,廖雪峰的git教程,写得非常通俗易懂,我就不再画蛇添足另开git系列,仅记录个人在使用过程中遇到的问题与积累的经验。
要开始一个多人协作项目,我们首先需要在代码托管平台注册一个帐号,我们以github为例,在线新建一个git仓库:
如图点击新建仓库链接:
然后会进到如下界面:
一般都都回初始化一个README文件和一个license。
在线创建好仓库后,就可以把仓库克隆到本地进行工作了。
在任意文件夹中,使用如下命令克隆仓库:
git clone 仓库地址
克隆仓库分为两种方式——
一种是https方式,它的仓库地址类似于https://github.com/zyour_username/project_name.git
,使用此种类型的地址克隆到本地,向在线仓库推送更改的时候需要每次输入用户名和密码。
而另外一种就是ssh的方式,它的地址类似于:[email protected]:your_username/project_name.git
使用这种方式不会要求输入帐号密码,但是需要配置好ssh公钥:
账户 SSH 公钥是跟用户账户关联的公钥,一旦设置,就拥有账户下所有项目仓库的读写权限。
SSH公钥的配置有如下流程:
bash下使用如下命令生成一对rsa密钥:
ssh-keygen -t rsa -b 4096 -C "[email protected](注册的邮箱)"
会得到如下反应:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zeta/.ssh/id_rsa):
直接点击回车即可,一对密钥会保存在~/.ssh文件夹下。
登陆github,在右上角的头像点击setting,然后选择SSH and GPG keys
设置项,点击New SSH key
。
然后进入刚刚存放公钥的目录~/.ssh
,打开id_rsa.pub
,把里面全部的内容复制到输入框里点击确定。
这样,你就拥有了你的账户的所有的读写权限,可以将你本地的修改直接使用git命令行推送到本项目的在线仓库。
完成后在命令行测试:
ssh -T git@github.com
首次建立链接会要求信任主机,输入yes点回车即可。
这样,就可以在本地编写代码,然后将本地仓库的更改同步到在线仓库中。
克隆仓库后,git会自动将远程仓库命名为origin。
尝试进行一次提交:
git push -u origin master
上述命令会将本地的所有更改提交到远程仓库,同时会将本地的master分支和远程的master分支关联起来。
在将仓库克隆到本地后,就可以在本地进行开发工作。
假设要向项目里添加一个新特性,一般的流程是这样的:
这样子,本地的项目就成功添加了一个新特性,然后再将本地的修改推送到远程仓库即可。
bug的修改也遵循同样的流程,新建分支——修改bug——合并到master。
现将各阶段的操作说明如下:
在项目文件夹下,使用如下命令新建一个名叫feature的分支:
git branch feature
然后切换到新分支工作:
git checkout feature
也可以使用一条命令完成以上两个任务:
git checkout -b feature
写代码然后commit即可。
首先切换到master分支:
git checkout master
然后将feature分支合并到master:
git merge feature master
通常情况下,master分支的内容会被设定为与feature分支一模一样。
但如果在feature分支开发的同时master分支也有了新的更改,就需要手动解决冲突:参考[解决冲突]。
使用刚才提到的push命令将master上做出的的所有更改推送到远程仓库:
git push orgin master
可能会出现推送失败的情况:
xxxxxx
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
这是因为远程仓库发生了更改,即其他的小伙伴提交了一些你没有克隆到的修改。
使用pull命令将小伙伴的更改拉取到本地即可:
git pull
pull的时候仍需要解决冲突,比如你和你的小伙伴修改了同一个文件的时候,这时候仍需要手动解决冲突:[解决冲突]。
然后再使用push命令推送更改:
git push orgin master
至此,完成了线上仓库的一次小版本更新。