8

我有一个历史悠久而奇怪的 git 存储库。我不知道开发人员对这个存储库做了什么,也无法控制他们现在用它做什么。

但我需要克隆这个存储库(用于 redmine 集成)并定期获取所有更改。

我该怎么办:

git clone --bare git@git.server.com:/opt/git/repo
cd repo.git
git log

现在我可以看到所有提交。美好的。

接下来,开发人员在主存储库中进行提交,我想获取所有更改(所有分支、标签等):

> git fetch --all 
Fetching origin
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 14 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (14/14), done.
From git.gmcs.ru:/opt/git/ecco
 * branch            HEAD       -> FETCH_HEAD

但是如果询问提交历史,我没有看到在主存储库中进行的最后一次提交。为什么 ?

如果我发布的信息不足,我准备为您提供所有需要的信息。

提前致谢。

更新

这是原始存储库中的一个分支信息:

git branch -a
  one
  test
* master
  release

这是克隆存储库中的分支信息:

git branch -a
  one
  test
* master
  release

我可以在原始存储库的主分支中看到最后一次提交,但在克隆存储库的主分支中找不到它们。

4

4 回答 4

14

要将更多更新获取到裸仓库中,我会:

git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

然后我可以这样做:

git fetch
于 2013-06-27T01:52:24.170 回答
6

你应该使用git pull

git merge在 fetch 之后运行以获取获取的更改

如果您有一个裸存储库,则无法进行拉取,因为拉取想要与 HEAD 合并,而裸存储库没有。

要更新裸存储库,您可以将其添加remote到非裸存储库并推送到它。

但我认为--mirror,而不是按--bare原样为你工作。

与 --bare 相比,--mirror 不仅将源的本地分支映射到目标的本地分支,它还映射所有 refs(包括远程分支、注释等)并设置 refspec 配置以覆盖所有这些 refs通过目标存储库中的 git 远程更新。

然后您可以使用git remote update更新镜像存储库

于 2012-11-19T12:16:04.423 回答
1

要定期获取您的裸存储库,请先配置

git config remote.origin.fetch "+*:*"

然后简单地运行

git fetch --prune

获取所有更改,包括标签、新分支甚至分支删除(选项--prune)。

  • 还请注意上述命令中的双引号 ( ") 以保护 asterix ( *) 不被您的 shell 解释。
  • 需要加号以允许非快进更新。如果您想备份遥控器的当前状态,这可能是您的意图。
  • 注意:使用此配置不会获取标记删除。

另请参阅https://stackoverflow.com/a/33461528/4138912

于 2015-11-01T11:45:57.133 回答
0

您可以使用 更新HEAD您的裸存储库git symbolic-ref,例如将其指向master远程分支origin

$ git symbolic-ref HEAD refs/remotes/origin/master

如果您用于git fetch更新遥控器,它将更新例如origin/master. 所缺少的只是重新指向克隆的HEAD.

于 2012-11-19T13:03:31.143 回答