刷新git裸克隆

时间:2011-09-18 06:15:58

标签: git

我在usb存储上使用git bare repo作为不同位置之间工作的传输机制。我通过以下方式启动了USB存储:

git clone --bare / path / to / clone

问题是如何刷新克隆(即获得新克隆的等效结果)而不删除旧克隆并进行新克隆。

由于以下原因,仅仅执行git-fetch是不够的:

  1. git-fetch无法获取新分支
  2. 如果源代码执行了rebase或commit -amend,则usb-clone仍将包含旧提交。
  3. 第一个问题可以通过以下脚本解决:

    git fetch --prune origin -- \
      `git ls-remote -h origin | while read sha ref; do echo "+$ref:$ref"; done`
    

    (参见:http://git.661346.n2.nabble.com/How-to-fetch-all-remote-branches-from-remote-td3380849.html

    但第二个问题怎么解决?如何清除遥控器上不再存在的提交?

3 个答案:

答案 0 :(得分:1)

git gc将清除任何无法访问的提交。

看起来你在usb挂载的目录中运行命令。如果是这种情况,那么我建议您采取不同的方法。使用工作目录中的git push更新usb存储库,并将git pull移动到其他计算机时。这将确保在usb存储库中确保所有内容都是最新的。不要在安装usb的目录中运行任何东西。

顺便说一句,git fetch 拉入新分支。如果不是那么就会出现其他问题。

答案 1 :(得分:1)

不使用--bare切换进行克隆,而是使用--mirror个。{ 然后git fetch将完成这项工作。

Discussed here

答案 2 :(得分:0)

git fetch会获取新分支。

作为替代方案,从您的工作/主要仓库为您的裸仓做git push