Git clone --bare / fetch

时间:2012-11-19 12:04:12

标签: git

我有一个历史悠久且奇怪的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

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

如果我发布的信息不足,我愿意为您提供所需的全部信息。

提前致谢。

更新

以下是原始代表中的brach信息:

git branch -a
  one
  test
* master
  release

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

git branch -a
  one
  test
* master
  release

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

4 个答案:

答案 0 :(得分:13)

要在裸仓库中获取更多更新,我会这样做:

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

然后我可以做:

git fetch

答案 1 :(得分:6)

您应该使用git pull

在获取获取更改后

或运行git merge

如果你有一个裸存储库你不能做拉,因为拉想要与HEAD合并,这是一个裸仓库没有。

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

但我认为--mirror代替--bare会对您有效。

  

与--bare相比, - mirror不仅映射了本地分支   源到目标的本地分支,它映射所有引用(包括   远程分支,注释等)并设置refspec配置   所有这些引用都被git远程更新覆盖了   目标存储库。

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

答案 2 :(得分:1)

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

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

然后只需运行

git fetch --prune

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

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

另见https://stackoverflow.com/a/33461528/4138912

答案 3 :(得分:0)

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

中的分支origin
$ git symbolic-ref HEAD refs/remotes/origin/master

如果您使用git fetch更新遥控器,它会更新,例如origin/master。所有缺失的是重新命名克隆的HEAD