Git可以将裸存储库克隆到另一个裸存储库

时间:2011-06-18 19:15:28

标签: git msysgit

我确信这可以做到,我只是不确定正确的方法。

我的方案是将USB驱动器,本地硬盘驱动器和网络驱动器都连接到我的PC。本地硬盘驱动器将包含本地工作的本地活动仓库。网络驱动器(具有长UNC路径!)将包含充当上游参考副本的主裸存储库(办公室中的2个或3个协作者),而USB驱动器充当我的移动拷贝到一些外部PC的sneakernet(我的其他合作者有自己的驱动器,这可能会影响答案)。 (这是在windows msysgit上)。

关注的是设置USB驱动器,并确保我正确地指导工作流程(参见using-git-on-usb-stick-for-travelling-code

  • 我应该克隆我的本地仓库,还是克隆网络仓库?
  • 有哪些特殊标志可确保USB驱动器正确卸下? (-nohardlinks?)

3 个答案:

答案 0 :(得分:8)

你可以从repo创建一个裸到裸的克隆,使用长的UNC路径到USB记忆棒

cd /e/src
git clone --bare //server/path/to/your/network/repo.git

但是我怀疑它只是一步到位就能帮到你。

鉴于您将在当地的活跃仓库中工作,我会在USB记忆棒上创建一个裸仓库

cd git init --bare /e/src/myproject.git

在您当地的有效仓库中创建一个遥控器

git remote add usb file:///e/src/myproject.git

然后根据需要推送它。

git push usb philip/cool-new-feature

上述命令假设您的USB记忆棒是E:并且您的工作目录位于您当地的有效回购中。

据我了解您的问题,您至少有两个不相交的协作者,这取决于您的其他协作者是否共享他们自己的共同中央存储库,或者是否都在使用隔离的计算机。这意味着您的USB记忆棒上的存储库是每个人(最终)都可以访问的存储库,因此您的团队成员将大部分时间花在“飞机上”上。

设计开发过程的建议:

  1. 避免您或其他人成为指定合并的情况。相反,您希望团队中的所有成员尽可能频繁地集成,以保持冲突变更的可能性小且易于管理。
  2. 让不相交的合作者增加了某人破坏其他人所依赖的功能的风险,无论是通过看似无害的更改还是错误地解决合并冲突。您应该使用快速的一键式方法来确定是否有任何回归或新错误进入您的代码。
  3. 每组协作者,那些更频繁访问彼此的存储库或共享存储库而不是USB存储库的人应该在他们自己之间实现持续集成。当USB记忆棒的新提交可用时,将其所拥有的内容与来自团队其他成员的新代码集成应该成为首要任务。
  4. 您可能采取的一种方法是让每个人都保持干净的主人并仅在其他分支上进行更改。物理拥有USB记忆棒是一种自然的集成令牌,因此当给定的合作者拥有它时,序列就会出现

    git checkout master
    git pull usb master     # should always be a fast-forward
    git merge feature1
    make test               # or whatever, and repeat until no breakage
    git commit
    git push usb master
    git push shared master  # if appropriate
    git merge feature2      # if necessary
    ...

答案 1 :(得分:3)

我建议您创建主网络仓库的镜像克隆:

cd /path/to/usb/drive
git clone --mirror url://to/main/network/repo/project.git

镜像克隆是一个裸存储库,其中包含与原始存储库相同的分支,标记等。

不要担心传递--no-hardlinks,因为无法在文件系统之间进行硬链接。

每当您想要更新USB镜像时,只需安装它并运行以下命令:

cd /path/to/usb/drive/project.git
git remote update -p

如果你曾经推入USB驱动器镜像,那么将这些提交到主网络仓库的最佳方法是通过本地硬盘驱动器回购:

# initial setup
cd /path/to/local/project
git remote add usb /path/to/usb/drive/project.git

# grab the commits from the usb drive
git remote update -p

# merge the usb drive commits into your local master branch
git merge usb/master

# push the result up to the main network repo
git push

答案 2 :(得分:0)

你可以从任何一个克隆。一旦USB驱动器完成,您可以将其删除。您可以使用

仔细检查完整性
git fsck --full