我想安装一个中间 git 存储库,我的所有团队成员都可以在这个存储库中提交和推送。
当所有团队成员完成所有任务时,中间存储库中所有已提交的更改必须交付到位于 Internet 上托管的另一台服务器的官方 git 存储库中。
我的问题,是否可以进行此配置?怎么做?
我想安装一个中间 git 存储库,我的所有团队成员都可以在这个存储库中提交和推送。
当所有团队成员完成所有任务时,中间存储库中所有已提交的更改必须交付到位于 Internet 上托管的另一台服务器的官方 git 存储库中。
我的问题,是否可以进行此配置?怎么做?
是的,你可以,因为GIT是一个分布式修订控制系统。任何克隆的存储库都可以用作其他存储库的起点(目的地)。
假设您想为名为 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 时,任何给定的存储库都可能扮演mainTargeted / proxy / orAnythingElse存储库的角色。
尝试使用裸存储库(http://git-scm.com/book/ch4-2.html)
基本上,你启动一个新的 git bare repo,比如
git init --bare
将此存储库添加到每个开发人员的远程,使用
git add remote upstream_intermediate_bare path/to/bare/repo
然后使用将您的提交推送到上游裸存储库
git push upstream_intermediate_bare branch_name
接下来,在你的官方 git repo 中,添加另一个远程
git add remote downstream_intermediate_bare path/to/bare/repo
git pull downstream_intermediate_bare branch_name
裸存储库对于仅用作推送和拉取源的远程存储库的常见情况很重要。检查这个。
编辑:示例示例
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 中,他推送到一个裸存储库,在该存储库中您无法进行拉取或推送,您必须将其添加到远程并对其进行操作,然后官方 repo 只是从裸存储库中提取。
如果我理解正确,您想对 git repos A 进行初始更改
一旦达到某个点(里程碑、日期等),对回购 A 的所有更改都会被采用并应用于回购 B
大多数开发团队通过一个 repos 和分支来做到这一点
但是,您可以在任何您喜欢的地方设立分支机构。
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
您的存储库 A 可能类似于上面示例中的 linux-nfs。完成此操作后,可以使用 git merge 将两者结合起来
假设在一个项目中工作。您只需从 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'
...
你的分支中有一些特性(master 中没有)你是第一个在这个分支中有 worker 的开发人员,所以......你可以在 origin 中推送它。
...
git push origin new-branch
...
现在存在一个名为“origin/new-branch”的分支,所有开发人员都可以从这个分支中提取。现在你继续在你的 localasl 分支中提交:
...
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
...
最后你可以把所有的提交都放在 master
...
git checkout master
git merge new-branch
git push origin master
结束。