一,搭建Git服务器>>>>>>>>>>>>>>>>>
环境基于Ubuntu-12.04
项目服务器管理员:
用户添加及ssh RSA登录(免密登录)
1.新建一个工程用户,作为该项目的ssh登录用户 也是git代码的存放目录
#su root
#adduser gittest(快捷创建用户)
2.添加所有项目成员的ssh公钥
切换到新的账号
#su gittest
新建.ssh目录,/home/gittest/.ssh/
#mkdir /home/gittest/.ssh
在该目录新建
authorized_keys文件
#touch
authorized_keys
拷贝项目成员ssh公钥到此目录
(
注意是ssh-rsa打头的!!!,检查是否出错)
验证ssh是否能免密登录:(默认端口22,这里修改服务器ssh端口号,具体使用和服务器管理员确认)
项目成员在自己的系统下
ssh -p 2222 gittest@222.20.20.20(注意-p后面跟服务器sshd的端口号,gittest是ssh的用户名,222.20.20.20是服务器的ip
能登录则说明免密成功,接下来才能做git的相关工作
3.建立好git代码的仓库目录,这个只作为存储代码的,不能执行git的一般操作。
git --bare init /home/gittest/Test.git
(
git目录下;而使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件)
项目成员:
1.生成ssh RSA公钥
#
ssh-keygen –t rsa -C "zhuhainan2014@163.com"
生成的默认路径是~/.ssh/id_rsa.pub (公钥),这个公钥是要给项目服务器管理员的。
2.待项目主管push到服务器之后
#git clone gittest@qiyangserver:/home/gittest/Test2.git
(qiyangserver
cat>~/.ssh/config
# 映射一个别名
host qiyangserver
hostname 282.20.20.20
port 2222
# 映射一个别名
host qiyangserver
hostname 282.20.20.20
port 2222
)
#cd 到新建的代码目录
#git branch -a
同步开发者分支或其他你需要的工作分支到本地
#git
git checkout -b develop origin/develop
3.
git commit -a -m "你的提交说明"
(这个可以不要,默认origin已经添加) 4.git remote add origin gittest@qiyangserver:/home/gittest/Test2.git
(这个可以不要,默认origin已经添加) 4.git remote add origin gittest@qiyangserver:/home/gittest/Test2.git
4.也许remote已经有更新,如果你的代码没有给其他人共享,可以使用git pull --rebase或者 git fetch
(这样不会做归并操作,也可以同步最新的分支)
另外两个相关的命令是: git pull和 git pull --rebase。
这两个的区别在于前者是git fetch + git merge,后者是git fetch + git rebase。
5.git push origin develop 上传分支。
这两个的区别在于前者是git fetch + git merge,后者是git fetch + git rebase。
5.git push origin develop 上传分支。
项目主管:
1.做出项目原型
#git init
#git add -A
#git commit -m "项目说明"
创建开发分支
#git checkout -b develop
2.添加远程源
#git remote add origin gittest@qiyangserver:/home/gittest/Test2.git
(注意是否有同名remote!!! )
(qiyangserver
cat>~/.ssh/config
# 映射一个别名
host qiyangserver
hostname 282.20.20.20
port 2222
# 映射一个别名
host qiyangserver
hostname 282.20.20.20
port 2222
)
3.推送至项目服务器
#
git push origin master
4.推送develop分支到项目服务器
#git push origin develop
5.指定本地分支和远程分支的关系,否则git pull不下来
(但是能git push上去) 。 git branch --all 可以查看local和remote的对应关系
#git branch --set-upstream-to=origin/develop develop
6.项目主管做自己的事
提交前先统一一下版本
#git pull --rebase
(rebase作用详解指令详解)
7.git push origin develop 提交到develop分支
这里简单解释一下rebase
git pull --rebase 重整是线性的。如Ubuntu-file3之前的几次
二,多人协作开发>>>>>>>>>>>>>>>>>>>
关键是分支的建立(master, develop, feature, hot-fix) 和理解 详解
http://nvie.com/posts/a-successful-git-branching-model/
《
A successful Git branching model 》
feature分支
从develop分支发出,最终归并到develop分支
#git checkout -b newfeture develop
#git push origin
newfeture
关联分支
#git branch --set-upstream-to=origin/newfeture newfeture
分支完成时,切到develop分支,merge该newfeture分支
#git checkout develop
归并newfeature分支,使用--no-ff属性,能够知道这是一个feature递交版本过程,容易追溯,如下图的newfeature提交
#git merge --no-ff newfeature
release分支
当新的feature足够多,准备发布新的版本号版本。 同样从develop出发,最终用于更新到master分支.该版本不新增新的feature或大的改动
#
git checkout -b release-1.0 develop
#git push origin release-1.0
#git branch --set-upstream-to=origin/
release-1.0
release-1.0
通过测试,没有明显bug,发布到master
#
git checkout master
#git merge --no-ff release-1.0
#
git tag -a v1.0 (tag就是一个只读的branch,一般为每一个可发布的里程碑版本打一个tag. 里程碑标记。 也可以被checkout)
#git push origin master
切到develop分支,也归并发布版的改动
#git checkout develop
#git merge --no-ff release-1.0
删除release分支
#
git branch -d release-1.0
hot-fix分支
类似于release分支,只不过该分支是处理bug的,从master分支出来
#git checkout -b hotfix-1.1.1 master
同上需要归并到master和develop
#
git tag -a 1.2.1
删除hotfix分支
#
git branch -d hotfix-1.1.1