前言
git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,是团队协作开发的必备技能,下图是git的工作流程。

注册
- gitlab:https://gitlab.com
- github:https://github.com
- osc:https://gitee.com
下面以gitlab为例,注册好账号后,新建项目,命名为test_git。


下面请准备两台电脑,没有两台电脑可以用虚拟机代替
A和B电脑都安装Git
-
Windows:
进入https://git-scm.com下载安装,安装时全部点下一步即可。
-
Linux(Ubuntu):
apt install git
-
Linux(Centos):
yum install git
-
Mac:
brew install git
设置git的提交邮箱和提交用户名(这步不能漏,不设置邮箱和用户名是无法提交的),执行命令:
git config --global user.email "you@example.com"
git config --global user.name "your name"
这个邮箱和用户名只是你提交到git远程上显示出来的,可以随便填写,并不需要和你的gitlab邮箱和用户名保持一致,但建议保持一致。
A和B电脑都配置SSH-Key
配置ssh-key,简单来说就是git本地和git远程通过密钥关联起来,不用每次推送和拉取都输入密码,而且还是加密传输。
1. 本地配置
命令行输入(Windows的打开安装好的git.exe输入命令):
ssh-keygen -t rsa -C "你的邮箱地址"
一路回车,生成ssh密钥。
-
Windows:
打开c:/用户/自己的用户名/.ssh,找到id_rsa.pub这个文件,用记事本打开。 -
Linux/Mac:
打开~/.ssh,找到id_rsa.pub这个文件,用文本编辑器打开。(Linux可能找不到.ssh文件夹,因为这是隐藏的文件夹,按Ctrl + H即可显示出)
2. 远程配置
登录gitlab,打开Settings -> SSH Keys,把文件id_rsa.pub的内容复制到Key输入框中,再编写Title输入框,title一般写id_rsa.pub里的那个邮箱(A和B两台电脑就需要添加两个ssh-key,title可以相同)。



A电脑初始化项目
新建文件夹test_git,进入test_git文件夹,新建文件test.txt,写入一行A init,

在test_git文件夹下执行以下命令:
git init
git remote add origin git@gitlab.com:chunjie/test_git.git
git add .
git commit -m "first commit"
git push -u origin master
git远程地址换成你的:

在gitlab上项目里新建develop远程分支:


A电脑操作1
在test_git文件夹下,新建并切换到develop本地分支,即执行命令:
git checkout -b develop
修改test.txt文件,在最后添加一行A develop add 1,

在test_git文件夹下执行命令:
git add .
git commit -m "A develop add 1"
git push origin develop
B电脑操作1
在一个文件目录下克隆项目,进入test_git文件目录,新建并切换到develop本地分支,拉取最新的develop远程分支,即在test_git目录下执行命令:
git clone git@gitlab.com:chunjie/test_git.git
git checkout -b develop
git pull origin develop
打开查看test.txt文件,

修改test.txt文件,在最后添加一行B develop add 1,

在test_git目录下执行命令:
git add .
git commit –m "B develop add 1"
git push origin develop
A电脑操作2
修改test.txt文件,在最后添加一行A develop add 2,

在test_git文件夹下执行命令:
git add .
git commit -m "A develop add 2"
git pull origin develop
发现提示冲突了,

根据提示是test.txt文件冲突,因为刚才B电脑也在最后添加了一行B develop add 1,所以需要解决冲突,打开test.txt文件,

根据实际情况编辑好test.txt,这里是再添加一行,即在B develop add 1后再添加一行A develop add 2,

然后在test_git文件夹下执行命令:
git add .
git commit -m "解决冲突"
git pull origin develop
git push origin develop
B电脑操作2
拉取最新的develop远程分支,即在test_git文件夹下执行命令:
git pull origin develop
发现test.txt文件变成了最后添加两行B develop add 1和A develop add 2。

知识点
-
有时执行git push命令会提示拒绝提交,是因为有人比你先提交了,你需要先git pull,再git push,所以每次git push前都先git pull一下。
git pull origin develop git push origin develop
-
平时要多用git status这个命令,随时查看当前git的状态。
git status
-
项目中通常需要在根目录下添加.gitignore文件,作用是可以忽略指定文件不提交。
例如:java项目通常可以这样书写.gitignore文件:*.iml /.idea/ /bin/ /log/ /logs/ /src/test/ /target/ /.apt_generated/ /.settings/ /.classpath /.project /.factorypath /.springBeans /.DS_Store
-
可以划分为master、develop、test三个分支,远程分支和本地分支保持一致,平时在develop分支下开发,完成阶段性的内容就把develop分支合并到master分支,master分支要保证是正常的,需要测试就把develop分支合并到test分支,发一次版就增加一个分支release_版本号,把develop分支合并进去。
例如:要把develop分支合并到master分支,就要先切换到master分支,再把develop分支合并到master分支,检查master分支没事后,再切换回develop分支进行开发,即执行命令:git checkout master git merge develop git checkout develop
补充
发现不少人会问怎样算解决完冲突,其实怎样算解决完冲突是由你决定的,你觉得是解决完了就是解决完了,总之你打开有冲突的文件进行编辑,你觉得修改好了就是解决完冲突了,然后就可以add-commit-push了,为了减少处理冲突,每完成一个小功能就马上提交。
ps:发现造成这个疑问往往是使用eclipse用git界面操作时造成的,建议用命令行操作,不要用界面操作。
总结
git常用的命令:
查看当前的状态:git status
克隆项目:git clone 远程地址
添加当前目录下所有文件到本地当前分支:git add .
添加指定文件到本地当前分支:git add 文件路径
提交到本地当前分支:git commit -m "提交的内容"
从远程分支拉取到本地当前分支:git pull origin 远程分支名
把本地当前分支推送到远程分支:git push origin 远程分支名
切换到不存在的本地分支:git checkout -b 本地分支名
切换到已存在的本地分支:git checkout 本地分支名
合并本地指定分支到本地当前分支:git merge 本地分支名
合并远程指定分支到本地当前分支:git merge origin/远程分支名
个人微信公众号
微信公众号id:chunjie_tech

网友评论