0

我想安装一个中间 git 存储库,我的所有团队成员都可以在这个存储库中提交和推送。

当所有团队成员完成所有任务时,中间存储库中所有已提交的更改必须交付到位于 Internet 上托管的另一台服务器的官方 git 存储库中。

我的问题,是否可以进行此配置?怎么做?

4

5 回答 5

2

有可能的。

您可以按照此处的教程或使用Gitolite等工具在您的 LAN 计算机中设置一个 git 服务器。准备好本地 git 存储库后,您可以授予团队成员访问权限。

要将本地服务器同步到中央服务器,请使用两个远程设置一个本地副本。然后您可以简单地git pull从本地服务器获取本地更改并发git push送到中央服务器。您可以通过使用无密码密钥对访问两台服务器来安排此任务。

有关设置多个 git 遥控器的更多详细信息,请参见此处

于 2013-10-02T07:42:16.583 回答
2

是的,你可以,因为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存储库的角色。

于 2013-10-02T07:45:11.143 回答
1

尝试使用裸存储库(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 只是从裸存储库中提取。

于 2013-10-02T08:55:14.550 回答
1

如果我理解正确,您想对 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 将两者结合起来

于 2013-10-02T07:46:32.767 回答
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'
...

你的分支中有一些特性(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

结束。

于 2013-10-02T09:15:35.757 回答