我想安装一个intermidiary git存储库,我的所有团队成员都可以进行提交并推送这个存储库。
当所有团队成员完成所有任务时,中间存储库中所有已提交的更改必须在位于互联网上托管的另一个服务器中的官方git存储库中提供。
我的问题是,是否可以进行此配置?以及如何做到这一点?
答案 0 :(得分:1)
有可能。
您可以按照教程here或使用Gitolite等工具在其中一台局域网计算机中设置git服务器。准备好本地git repo后,即可授予对团队成员的访问权限。
要将本地服务器同步到中央服务器,请使用两个遥控器设置一个本地副本。然后,您只需从本地服务器git pull
获取本地更改,并git push
到中央服务器。您可以使用无密码密钥对来访问这两个服务器来安排此任务。
有关设置多个git遥控器的更多详细信息,请available here
答案 1 :(得分:1)
是的,你可以,因为GIT是Distributed Revision Control System。任何克隆的存储库都可以用作其他存储库的源(目标)。
假设您要为名为main.git的“主”存储库创建代理存储库
git clone --bare path_to_main_repo/main.git path_to_proxy_repo/proxy.git
git clone path_to_proxy_repo/proxy.git path_to_working_repository/working_repository
然后,您可以从working_repository
推送到proxy
以及从proxy
推送到main
存储库。
请记住,在使用GIT时,任何给定的存储库都可能扮演 a mainTargeted / proxy / orAnythingElse 存储库的角色。
答案 2 :(得分:1)
如果我理解正确,您希望对git repos A进行初始更改
一旦到达某个点(里程碑,日期等),所有对repos A的更改都将被采用并应用于repos B
大多数开发团队使用单个回购和分支
来完成此操作但是,您可以随时随地分支。
git remote
命令
EXAMPLES
· Add a new remote, fetch, and check out a branch from it
$ git remote
origin
$ git branch -r
origin/master
$ git remote add linux-nfs git://linux-nfs.org/pub/linux/nfs-2.6.git
$ git remote
linux-nfs
origin
$ git fetch
* refs/remotes/linux-nfs/master: storing branch 'master' ...
commit: bf81b46
$ git branch -r
origin/master
linux-nfs/master
$ git checkout -b nfs linux-nfs/master
你的repos A可能就像上面例子中的linux-nfs一样。执行此操作后,git merge可用于组合两个
答案 3 :(得分:1)
尝试使用裸存储库(http://git-scm.com/book/ch4-2.html)
基本上,你会像
那样开始一个新的git bare repogit init --bare
使用
将此存储库添加到每个开发人员的远程数据库中git add remote upstream_intermediate_bare path/to/bare/repo
然后使用
将您的提交推送到上游裸存储库git push upstream_intermediate_bare branch_name
接下来,在您的官方git仓库中,添加另一个远程
git add remote downstream_intermediate_bare path/to/bare/repo
git pull downstream_intermediate_bare branch_name
裸存储库对于仅用作推拉源的远程存储库的常见情况非常重要。检查this。
编辑:示例
cd ~/Desktop/test
mkdir dev1
mkdir official
cd dev1 && git init && touch file && git add . && git commit -m "msg" && cd ..
cd official && git init && cd ..
git init --bare interim
cd dev1 && git remote add upstream_intermediate_bare ../interim && cd ..
cd official && git remote add downstream_intermediate_bare ../interim && cd ..
cd dev1 && git push upstream_intermediate_bare master && cd ..
cd official && git pull downstream_intermediate_bare master && cd ..
所以在上面的例子中,开发人员代码在目录dev1中,他推送到一个裸仓库,在这里你无法进行拉动或推动,你必须添加它添加到你的遥控器并操作它,官方的回购只是从裸存储库中提取。
答案 4 :(得分:1)
假设在项目中工作。您只需从master中提取代码,然后打开新分支:
git pull origin master
git checkout -b new-branch
...
现在你可以推送你的分支,或者在推送一些提交之前开始使用它。
...
git add .
git commit -am 'I am pushing in bew-branch'
...
git add .
git commit -am 'I am pushing in bew-branch'
...
你的分支中有一些功能(主人没有)你是第一个在这个分支中有工人的开发人员,所以......你可以把它推到原点。
...
git push origin new-branch
...
现在存在一个名为'origin / new-branch'的分支,所有开发人员都可以从这个分支中获取。现在,您继续在locasl分支中提交:
...
git add .
git commit -am 'I am pushing in bew-branch'
...
git add .
git commit -am 'I am pushing in bew-branch'
...
其他开发人员推送了一些代码,现在你需要提取
...
git pull origin master
...
Fix merge
...
git push origin new-branch
...
最后你可以将所有提交放在主
中...
git checkout master
git merge new-branch
git push origin master
结束。