22.7-22.12

22.7 建立远程仓库

22.8 克隆远程仓库

22.9 分支管理

22.10 远程分支管理





22.7 建立远程仓库


1 首先到 https://github.com 注册一个账号

截图

2 创建自己的git,点repositories 再点new

 名字自定义,比如叫studygit  选择public  点 create repository

 截图

 3 添加key:右上角点自己头像,选择settings,左侧选择SSH and GPG keys

 截图

 左侧点New SSH key,添加新的ssh key

 截图


4 把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里

5 执行命令,生成公钥

 ssh-keygen

 cat ./.ssh/id_rsa.pub

6 将cat到的内容,输出到github主页的公钥信息栏

截图

有了公钥之后就能进行互相通信了

6.1 在本地(客户端)创建仓库 ,在仓库写入内容,将内容推送到远程仓库上面

准备工作:在本地(客户端)建立项目目录

# mkdir -p /data/git/gh-project01

# cd !$

cd /data/git/gh-project01

ls


6.2 本地仓库创建

本地仓库创建指南

截图

…or create a new repository on the command line

echo "# gh-project01" >> README.md

git init

git add README.md

git commit -m "first commit"

git remote add origin https://github.com/kevinxlau/gh-project01.git

git push -u origin master

Username for 'https://github.com': kevinxlau

Password for 'https://[email protected]':

Counting objects: 3, done.

Writing objects: 100% (3/3), 221 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To https://github.com/kevinxlau/gh-project01.git

 * [new branch]      master -> master

分支 master 设置为跟踪来自 origin 的远程分支 master。



解释:

git init

初始化仓库

git add README.md

建立文件

git commit -m "first commit"

commit操作

git remote add origin https://github.com/kevinxlau/gh-project01.git

此处用了https的连接方式,如果用ssh的话就能更好的直接互动了,相当于免密操作,因为刚才已经设置了ssh的匹对 

git push -u origin master

推送到远程仓库


7 测试自定义推送文件

7.1 建立文件1.txt

[root@9F-VM1 gh-project01]# touch 1.txt

[root@9F-VM1 gh-project01]# echo -e "111\n222\n333" > 1.txt

[root@9F-VM1 gh-project01]# cat 1.txt

111

222

333


7.2 推送到远程仓库

# git add 1.txt

# git commit -m "add 1.txt"

[master 09e0188] add 1.txt

 1 file changed, 3 insertions(+)

 create mode 100644 1.txt

#git pust

Username for 'https://github.com': kevinxlau

Password for 'https://[email protected]':

Counting objects: 4, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 276 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To https://github.com/kevinxlau/gh-project01.git

  72948bc..09e0188  master -> master


 查看是否推送成功

 截图

 截图


 22.8 克隆远程仓库

mkdir lamp

cd lamp

 git clone  [email protected]:aminglinux/lanmp.git

 它提示,会在当前目录下初始化一个仓库,并创建一个.git的目录,如下

 Initialized empty Git repository in /home/lanmp/.

 git/完成后,ls可以看到一个lanmp的目录

 cd  lanmp

 vi lanmp.sh 编辑一下文件,然后提交

 git add lanmp.sh

 git commit -m "sdlfasdf" 

 然后再推送到远程服务端

 git push



克隆前做的准备工作

创建克隆相关的目录并进入

mkdir test

cd test 


2 获得克隆地址后,进行克隆

git clone [email protected]:kevinxlau/gh-project-00.git

正克隆到 'gh-project-00'...

remote: Counting objects: 6, done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0

接收对象中: 100% (6/6), done.


3 查看本地是否克隆到项目了

ls

gh-project-00


4 同步测试

编辑命令,修改一下文件内容,

echo -e "111\n222\n333"  > 1.txt

git add 1.txt

git commit -m "add 1.txt"

# git push

Counting objects: 4, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To [email protected]:kevinxlau/gh-project-00.git

 d22f536..275d339  master -> master

 克隆成功

 5 修改1.txt内容待同步

 截图

 6 进行同步

 同步前1.txt

 # cat 1.txt

111

222

333


执行进行同步操作

# git pull

remote: Counting objects: 3, done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0

Unpacking objects: 100% (3/3), done.

来自 github.com:kevinxlau/gh-project-00

   275d339..53d5469  master     -> origin/master

更新 275d339..53d5469

Fast-forward

 1.txt | 2 ++

 1 file changed, 2 insertions(+)


同步后

# !cat

cat 1.txt

111

222

333

444

555


 7 done

22.9 分支管理

1 常用命令

git branch //查看分支

git branch

* master


git branch xxxx  //创建分支

git branch kevin


git checkout  kevin //切换到了kevin分支下

git checkout kevin

切换到分支 'kevin'

再用git branch查看,会看到有两个分支master和kevin,当前使用的分支前面会有一个*在kevin分支下 ,编辑2.txt,并提交到新分支

 git branch

* kevin

  master


2 修改测试

修改 2.txt的内容

echo "branch,kevin" >> 2.txt

将修改加入版本库

git add 2.txt 

git commit -m "ch 2.txt"

[kevin 16ea353] ch 2.txt

1 file changed, 1 insertion(+)

分支与分支之间的工作是隔离开的,无论是内容还是文件都是

# git branch

*kevin

master

#cat 2.txt

111

222

333

branch,kevin


切换回master分支

git checkout master //此时cat 2.txt发现并没有更改内容

# git checkout master

切换到分支 'master'

# cat 2.txt

111

222

333

# git branch

  kevin

* master

上述可以看到,我在kevin分支下添加的内容,在master分支下是看不到刚刚添加的内容。

3 分支合并

作用:将2个分支的内容统一分支之间内容一样,保持一致。


4 例如现在要把kevin分支合并到master分支下

git checkout master //合并分支之前,先切换到目标分支 

git merge kevin   //把kevin分支合并到了master

# git merge kevin

更新 c5aac76..16ea353

Fast-forward

 2.txt | 1 +

 1 file changed, 1 insertion(+)

查看2.txt,发现到刚刚在kevin分支修改的内容也被同步上去了。

 # cat 2.txt

111

222

333

branch,kevin


5 冲突情况

当同一个文件在两个分支下面做过编辑修改处理,但是内容不同步的话,会发生冲突



如果master分支和kevin分支都对2.txt进行了编辑,当合并时会提示冲突,需要先解决冲突才可以继续合并。

解决冲突的方法是在master分支下,编辑2.txt,改为kevin分支里面2.txt的内容。 然后提交2.txt,再合并kevin分支。

但是这样有一个问题,万一master分支更改的内容是我们想要的呢? 可以编辑2.txt内容,改为想要的,然后提交。切换到kevin分支,然后合并master分支到kevin分支即可(倒着合并)。合并分支有一个原则,那就是要把最新的分支合并到旧的分支。也就是说merge后面跟的分支名字一定是最新的分支。


删除

git  branch -d kevin //删除分支

如果分支没有合并,删除之前会提示,那就不合并,强制删除

git branch -D kevin


22.10 远程分支管理


 使用分支的原则

对于分支的应用,建议大家以这样的原则来:

 master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。

 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master

 开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支

 dev分支合并bob分支的命令是:

 git checkout dev   //先切换到dev分支,然后

 git merge bob


 远程分支

 1 本地新建的分支如果不推送到远程,对其他人就是不可见的

 克隆下来的仓库,默认是只克隆master的分支,其他是不会跟着克隆的

# git clone [email protected]:kevinxlau/test-2210.git

正克隆到 'test-2210'...

remote: Counting objects: 15, done.

remote: Compressing objects: 100% (9/9), done.

接收对象中: 100% (15/15), done.

处理 delta 中: 100% (1/1), done.

remote: Total 15 (delta 1), reused 9 (delta 0), pack-reused 0


 # git branch

* master


 查看远程分支  git ls-remote origin,可以看到所有分支

 # git ls-remote origin

c22273949100d3921cc68aa9186c16a069179f23 HEAD

c22273949100d3921cc68aa9186c16a069179f23 refs/heads/dev

c22273949100d3921cc68aa9186c16a069179f23 refs/heads/master


2 git clone的时候默认只把master分支克隆下来,如果想把所有分支都克隆下来,需要手动创建,在本地创建和远程分支对应的分支,使用#git checkout -b branch-name origin/branch-name,本地和远程分支的名称要一致

例如现在要将远程仓库的dev分支克隆下来

[root@9F-VM1 test-2210]# git checkout -b dev origin/dev

分支 dev 设置为跟踪来自 origin 的远程分支 dev。

切换到一个新分支 'dev'

[root@9F-VM1 test-2210]# git branch

* dev

  master


 3 内容变更

  建立文件,添加内容,以及推送到远程仓库

  # vim 2.txt


1112

2333

444455


4 推送

[root@9F-VM1 test-2210]# git add 2.txt

[root@9F-VM1 test-2210]# git commit -m "add 2.txt"

[dev d6a3dad] add 2.txt

 1 file changed, 4 insertions(+)

 create mode 100644 2.txt

[root@9F-VM1 test-2210]# git push

Counting objects: 4, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 334 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To [email protected]:kevinxlau/test-2210.git

   c222739..d6a3dad  dev -> dev

最后一行可以看到是dev-->dev 是本地的dev推送到远程的dev

格式是:本地分支-->远程匹配分支


git push会把所有本地分支的变更一同推送到远程,

如果想指定只推送一个分支,使用git push origin branch-name

[root@9F-VM1 test-2210]# git push origin dev

Everything up-to-date


5 本地创建分支,并推送

[root@9F-VM1 test-2210]# git branch dev2

[root@9F-VM1 test-2210]# git branch

* dev

  dev2

  master

[root@9F-VM1 test-2210]# git push origin dev2

Total 0 (delta 0), reused 0 (delta 0)

To [email protected]:kevinxlau/test-2210.git

 * [new branch]      dev2 -> dev2



 对于git push分支分两种情况

 当本地分支和远程分支一致时

 当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name  如果推送失败,先用git pull抓取远程的新提交

总结:

1 把本地的分支推送到远程分支执行命令:#git push origin branch-name

2 将远程的分支克隆到本地执行名:#git checkout -b branch-name origin/branch-name


猜你喜欢

转载自blog.51cto.com/13578154/2169820