我有一个历史悠久且奇怪的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分支中找不到它们。
答案 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解释。答案 3 :(得分:0)
您可以使用HEAD
更新裸存储库的git symbolic-ref
,例如将其指向远程master
origin
$ git symbolic-ref HEAD refs/remotes/origin/master
如果您使用git fetch
更新遥控器,它会更新,例如origin/master
。所有缺失的是重新命名克隆的HEAD
。