22.7 创建远程仓库linux
22.8 克隆远程仓库git
22.9 分支管理github
22.10 远程分支管理vim
22.7 创建远程仓库bash
1 首先到 https://github.com 注册一个帐号ssh
2 建立本身的git,点repositories 再点newide
名字自定义,好比叫studygit 选择public 点 create repository测试
3 添加key:右上角点本身头像,选择settings,左侧选择SSH and GPG keysspa
左侧点New SSH key,添加新的ssh key3d
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://kevinxlau@github.com': 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://kevinxlau@github.com': 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 git@github.com: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
1 克隆前作的准备工做
建立克隆相关的目录并进入
mkdir test cd test
2 得到克隆地址后,进行克隆
git clone git@github.com: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 git@github.com: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后面跟的分支名字必定是最新的分支。
6 删除
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 git@github.com: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 c22273949100d3921cc68aa9186c16a069179f23HEAD c22273949100d3921cc68aa9186c16a069179f23refs/heads/dev c22273949100d3921cc68aa9186c16a069179f23refs/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 git@github.com: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 git@github.com:kevinxlau/test-2210.git * [new branch] dev2 -> dev2
对于git push分支分两种状况
当本地分支和远程分支一致时
当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name 若是推送失败,先用git pull抓取远程的新提交
总结:
把本地的分支推送到远程分支执行命令:#git push origin branch-name
将远程的分支克隆到本地执行名:#git checkout -b branch-name origin/branch-name