我们有一个跨越两个物理位置的开发环境。
我们正处于尝试合并迄今为止的软件开发工作的最初阶段。很多重复等...
一个位置驱动开发,而另一个位置真正加速。一个主要问题是,主要开发团队在非常古老的服务器上,并没有使用更新的GitHub样式编码方法;我们希望采用Pull请求和代码审查,因为它们对我们向客户发布的方式具有优势。
这是设置。
位置A使用Gitolite并拥有“主”存储库
位置B使用GitLab,因为我们希望采用Pull-Requests,管理用户可以通过Web界面完成,这会减轻我的管理负担(我们很小)。我们喜欢的其他功能。
我试图做的事情,我认为很简单,就是在位置B设置一个cron作业,它只是从位置A拉出,然后在夜晚(相反的时区)推送到位置B.
它被证明是一种PITA。我似乎无法找到一种方法来轻松获取所有远程分支,而不是以某种手动方式检查它们。这导致分支从未被推送到位置B.
我错过了一些明显的东西吗?这只是我想要做的愚蠢吗?最终目标是我们使用运行GitLab的1台服务器获得位置A和B,但这可能需要一段时间,而且有些人会说服他们。
SSH访问完全可以解决并且与cron作业一样有效。这真的是我不能让我做我想做的事情。我可以进行一次获取 - 但是它也可以从位置B远程抓取...而不是我想要的。
以下是尝试从一个来源获取所有远程分支的脚本的开始,但它有各种各样的问题:
remote=locationA ;
for brname in `
git branch -r | grep $remote | grep -v master | grep -v HEAD
| awk '{gsub(/[^\/]+\//,"",$1); print $1}'
`; do
git branch --set-upstream-to $brname $brname;
# or
git branch --track $brname $brname ;
done
我会继续解决这个问题。只是想我会发布在这里,以确保我没有遗漏一些明显的东西或走下一条荒谬的道路。
答案 0 :(得分:0)
我能够完成使用git-python的求助。
我写了一个脚本来迭代任何给定存储库的遥控器。如果遥控器是原产地' (位置A)然后脚本获取所有分支和标签。然后脚本将所有内容推送到' secondary' (位置B)回购。
我可以使用fcron运行这个脚本,所以我基本上最终得到了一个不断更新的#34;镜像"存储库。
同样,不确定这是否只是我遇到的某种疯狂问题,或者是否有更简单的方法。但这很有用。
脚本供参考,但不是100%完成,所以请明智地使用。
""" gitSync.py
此脚本的目的是在两者之间自动执行gitSync 库。这将从一个遥控器中提取所有分支和标签 然后把它们推到另一个。
"""
import git
from git import Repo
import os
def main():
join = os.path.join
repo = Repo(os.getcwd())
git = repo.git
assert not repo.bare
for remote in repo.remotes:
print remote
if str(remote) == 'origin':
for ref in remote.refs:
print " " + str(ref)
try:
git.checkout(str(ref), '-t')
except:
print "Could not check-out branch. It probably already exists"
git.fetch(str(remote))
git.fetch('-t', str(remote))
git.pull
git.push('secondary', '--all')
git.push('secondary', '--tags')
#-------------------------------
if __name__ == "__main__":
main()