创建github的仓库
1.注册个帐号
2.创建一个仓库
3.创建一个ssh key:
在自己的虚拟机上生成一个key:
ssh-keygen
一路回车就好。
cat ~/.ssh/id_rsa.pub
这个就是那个key,填到git上面:
4. 把仓库checkout到本地,修改的话用ssh的方式,http是只读的:
git clone git@github.com:winlinvip/simple-rtmp-server.git
换成你自己的帐号。
5. 提交代码到本地仓库:
git commit -a -m "xxxxx"
6. 提交到服务器仓库:
git-push
7. 从服务器更新:
git-pull
为现有仓库贡献代码
1. 在别人的分支(主干)上点fork,就把这个分支fork到自己的账户下了。
譬如:
https://github.com/winlinvip/simple-rtmp-server
fork到winterserver的帐号下面:
https://github.com/winterserver/simple-rtmp-server
自己的仓库里就会显示下图:
2. clone到本地,修改代码,提交到本地仓库,提交到服务器仓库。和前面讲的一样。
3. 譬如:
https://github.com/winterserver/simple-rtmp-server
我在这个分支里修改了Readme,加了Authors,已经提交到了winterserver的服务器仓库。
我在这个分支里修改了Readme,加了Authors,已经提交到了winterserver的服务器仓库。
4. 在自己的分支上点compare,就可以看到和主干的区别:
5. 假设主干也做了修改,有冲突。主干的修改如下:
那么winterserver不用管,直接提交pull request就可以,主干会处理冲突。
主干合并fork的修改
前面提到winterserver fork了主干的分支,并提交了修改。
主干会收到修改,并发现有冲突不能直接合并。
1.主干winlinvip收到pull request,在界面可以看到有一个合并请求。并且不能直接合并,有冲突:
2. 点use the command line,可以看到合并的命令:
3. 照上面的这些命令做,显示冲突的地方是:
<<<<<<< HEAD
### Author
winlin(winterserver): [http://blog.csdn.net/win_lin](http://blog.csdn.net/win_lin)
=======
### Authors
winlin: http://blog.csdn.net/win_lin
>>>>>>> aacaf3be5f70340964e7b50bf5dd9ab1151d192e
4. 解决然后提交就好了:
git commit -a -m "merge from winterserver"
5. 显示当前的分支:
[winlin@dev6 simple-rtmp-server]$ git branch
master
* winterserver-master
6. 然后切换到master,合并这两个分支就好了:
[winlin@dev6 simple-rtmp-server]$ git checkout master
Switched to branch 'master'
[winlin@dev6 simple-rtmp-server]$ git branch
* master
winterserver-master
[winlin@dev6 simple-rtmp-server]$ git merge winterserver-master
Updating cabf6e0..d5925fe
Fast-forward
README.md | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
7.显示合并完成:
8. 合并完成后,winterserver的仓库不会自动更新。winterserver需要更新自己的仓库。
fork分支合并主干
winterserver fork了winlinvip的分支,前面已经提交了pull request,主干已经完成了合并。
现在winterserver需要将主干合并到自己的分析。
1. 可以在本地仓库看到仓库的源:
[winlin@demo simple-rtmp-server]$ git remote -v
origin git@github.com:winterserver/simple-rtmp-server.git (fetch)
origin git@github.com:winterserver/simple-rtmp-server.git (push)
2. 若没有主干,需要把主干添加进来:
[winlin@demo simple-rtmp-server]$ git remote add upstream https://github.com/winlinvip/simple-rtmp-server.git
[winlin@demo simple-rtmp-server]$ git remote -v
origin git@github.com:winterserver/simple-rtmp-server.git (fetch)
origin git@github.com:winterserver/simple-rtmp-server.git (push)
upstream https://github.com/winlinvip/simple-rtmp-server.git (fetch)
upstream https://github.com/winlinvip/simple-rtmp-server.git (push)
3. 更新主干的数据:
[winlin@demo simple-rtmp-server]$ git fetch upstream
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 6), reused 7 (delta 4)
Unpacking objects: 100% (9/9), done.
From https://github.com/winlinvip/simple-rtmp-server
* [new branch] gh-pages -> upstream/gh-pages
* [new branch] master -> upstream/master
4. 查看本地所有的分支:
[winlin@demo simple-rtmp-server]$ git branch -va
* master aacaf3b update readme
remotes/origin/HEAD -> origin/master
remotes/origin/gh-pages b3ef9a1 Create gh-pages branch via GitHub
remotes/origin/master aacaf3b update readme
remotes/upstream/gh-pages b3ef9a1 Create gh-pages branch via GitHub
remotes/upstream/master d5925fe merge from winterserver
5. 切换到自己的仓库的master:
git checkout master
6. 合并主干的master到自己的master:
[winlin@demo simple-rtmp-server]$ git merge upstream/master
Updating aacaf3b..d5925fe
Fast-forward
README.md | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
7. 然后git push提交就好了。
一般只需从第3步开始即可。
其他帮助:
https://help.github.com/
https://help.github.com/categories/63/articles
分支操作
查看分支:
[winlin@dev6 simple-rtmp-server.bk]$ git branch -va
gh-pages 38da587 rm cached Raspbian7 package.
* master d1b0d26 change release url to project https://github.com/winlinvip/srs.release
remotes/origin/HEAD -> origin/master
remotes/origin/gh-pages 38da587 rm cached Raspbian7 package.
remotes/origin/master d1b0d26 change release url to project https://github.com/winlinvip/srs.release
可以删除本地checkout的分支:
[winlin@dev6 simple-rtmp-server.bk]$ git branch -d gh-pages
[winlin@dev6 simple-rtmp-server.bk]$ git branch -va
* master d1b0d26 change release url to project https://github.com/winlinvip/srs.release
remotes/origin/HEAD -> origin/master
remotes/origin/gh-pages 38da587 rm cached Raspbian7 package.
remotes/origin/master d1b0d26 change release url to project https://github.com/winlinvip/srs.release
删除本地的remotes分支:
[winlin@dev6 simple-rtmp-server.bk]$ git branch -d -r origin/gh-pages
[winlin@dev6 simple-rtmp-server.bk]$ git branch -va
* master d1b0d26 change release url to project https://github.com/winlinvip/srs.release
remotes/origin/HEAD -> origin/master
remotes/origin/master d1b0d26 change release url to project https://github.com/winlinvip/srs.release
Github同步外部分支
譬如将github上的srs在csdn上fork一套,github/srs => csdn/srs.csdn,然后checkout到本地:
git clone git@code.csdn.net:winlinvip/srs-csdn.git
然后创建同步的upstream和分支:
git remote add upstream https://github.com/winlinvip/simple-rtmp-server.git
git fetch upstream
git checkout upstream/master -b srs.master
然后同步:
git checkout srs.master &&
git pull &&
git checkout master &&
git merge srs.master &&
git push
如此,每次只要执行个脚本就能同步了。