GitHub远程仓库、多人协作开发、远程分支合并

远程仓库

在了解之前,先注册github账号,由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要一点设置:

第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:

  • 接着会让你输入密码,一路回车即可
root@kali:~/CTFD# ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AU5KedsTeK/PH7UCkATDOehjQIqpnAEidz2CBOSTUc8 fatpuffer@163.com
The key's randomart image is:
+---[RSA 2048]----+
|**=oo==+.        |
|*+=o*+O+o.       |
|+= o.E.*+o       |
|o + + . oo.      |
|.o . .  So.   .  |
|        .  . . . |
|         o  o .  |
|          o  o   |
|           ..    |
+----[SHA256]-----+

  • 此时在你对应的目录下则会有两个文件
root@kali:~# cd .ssh/
root@kali:~/.ssh# ls
id_rsa  id_rsa.pub  known_hosts
root@kali:~/.ssh# 
  • id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第二步:登录github,打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。
GitHub远程仓库、多人协作开发、远程分支合并_第1张图片第三步:添加远程库并推送
GitHub远程仓库、多人协作开发、远程分支合并_第2张图片GitHub远程仓库、多人协作开发、远程分支合并_第3张图片

  • 目前,在GitHub上的这个CTFD仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

第四步:将本地仓库与远程仓库相关联:

git remote add origin git@github.com:FatPuffer/CTFD.git
  • 如果此时出现错误:fatal: remote origin already exists. 这时候说明远程仓库已经存在。这时候需要先删除origin仓库,然后再重新添加该远程仓库。指令如下
git remote rm origin
git remote add origin git@github.com:FatPuffer/CTFD.git

第五步:在本地仓库搭建django项目框架

django-admin startproject CTFD

第六步:创建一个版本

git add CTFD
git commit -m '创建django应用'

第七步:把本地master分支的最新修改推送到github上了

git push -u origin master
  • 此时,我们的本地master分支与远程的master分支已同步
  • 如果此处报错,报错信息如下:
To git@github.com:FatPuffer/CTFD.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:FatPuffer/test.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.
  • 可能因为我们创建仓库时添加了README.md文件和.gitignore文件,系统会自动帮我们做一次提交,所以在我们推送时,系统版本比我们本地版本更优先,因此报错,解决办法:现将远程master分支提价拉倒本地,然后再提交。
git pull origin master
git push -u origin master

第八步:创建并推送开发分支(dev)到远程库

  1. 首先创建并切换到dev分支
git checkout -b dev
  1. 在该分支下修改我们的 Django 项目中的任意文件
cd CTFD/CDFT
vim settings.py

 84 DATABASES = {
 85     'default': {
 86         'ENGINE': 'django.db.backends.mysql',
 87         'NAME': 'XXX',
 88         'USER': 'root',
 89         'PASSWORD': 'XXX',
 90         'PORT': 3306,
 91         'HOST': 'XXX'
 92     }
 93 }
  1. 将修改添加到暂存区,并进行提交
git add settings.py
git commit -m "修改数据库连接"
  1. 切换回master分支
git checkout master
  1. 使用git push命令将分支dev推送到远程仓库
git push origin dev
  • 到目前为止,我们远程仓库有了两个分支,一个是master分支,用来保存项目完整版本,一个是dev分支,用来保存阶段性开发记录信息

多人协作开发

(1)我们现在模拟另外开发组一个同事,首先在本地创建一个仓库(基础见 git基础),将远程仓库克隆到本地。

git clone git@github.com:FatPuffer/CTFD.git

(2)我们要在dev分支上做开发,就必须把远程的origin的dev分支创建到本地来,于是可以使用命令创建本地dev分支,为了方便我们推送,还会将本地分支设置为跟踪远程分,这样在推送时就可以直接使用git push命令,不需要再使用git push origin dev

cd CTFD  # 首先我们必须进入项目
git checkout -b dev origin/dev
git branch --set-upstream-to origin/dev dev

(3)进行开发,加入创建一个用户应用

cd CTFD
python3 manage.py startapp user

(4) 将修改添加到暂存区,并进行提交

git add CTFD/user
git commit -m "创建用户应用"

(5)将我们本地dev分支所做的修改推送到远程dev分支即可

git push 

推送分支时的冲突

假如同事A和同事B同时修改了dev分支下的一个文件,在A推送成功后,B的推送就会发生冲突。

解决办法:

先用git pull把最新的提交从origin/develop抓下来,然后在本地合并,解决冲突,再推送

冲突解决见下述链接:

分支管理 冲突解决 bug分支

远程分支合并

在项目开发中,我们都是在本地dev分支上进行开发,开发完成后将其推送到远程dev分支,远程dev分支保存了所有开发人员提交的记录信息,而远程master分支保存的才是我们项目每一阶段的版本形态。也就是说,我们当下所做的提交都保存在了远程dev分支上,那么要怎样才能将远程dev分更新的内容合并到远程master分支,形成一个完整的版本形态。

接下来我们开始实战讲解

(1)clone远程仓库代码到本地仓库

git clone git@github.com:FatPuffer/CTFD.git

(2)在本地创建dev分支并与远程dev分支对应

git checkout -b dev origin/dev

(3)切换回master分支

git checkout master

(4)合并dev分支到master上,如遇冲突,见上面链接解决。

git merge dev

(5)推送到远程的master上

git push origin master           

此时我们再去看一下远程仓库master分支信息,就会发现我们刚刚提交的信息已经被同步到master分支上了。

你可能感兴趣的:(Git版本控制)