【发布时间】:2013-08-06 11:55:19
【问题描述】:
我在 github.com 上有一个存储库,我将它 git 拉到我的工作站,编辑,提交,然后 git 将更改推送回 github。这一切都很好。
但我经常使用例如从 github.com 克隆只读副本:
git clone git://github.com/jhsrennie/Test.git Test-ro
这通常是因为我有临时测试安装,我不会在上面进行开发,但我需要检查代码构建和运行。我的 github 存储库的副本可以是只读的,因为不需要将任何更改推回 github。问题在于,当我将更改从 github 下拉到我的只读副本时,使用:
git pull origin master
我现在发现 git status 显示如下:
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
我无法将更改推回,而且我也不想这样做,但是未完成的提交会给我带来问题,例如我无法签出新的远程分支。我最终不得不删除我的只读存储库并在每次需要更新时重新克隆它。
如何从 github.com 更新我的 github 存储库的只读副本,而不会让他们认为有我需要推送的提交?
或者,我这样做是不是很傻,有没有更好的方法来实现我的目标?
回应纸杯蛋糕的回答
这对我来说也很奇怪,显然我缺少一些东西。这是重现问题的方法:
- 克隆存储库:
git clone git@github.com:jhsrennie/Test.git Test-rw - 克隆只读副本:
git clone git://github.com/jhsrennie/Test.git Test-ro - 更改
Test-rw,然后更改git add和git commit
git status 现在显示(如您所料):
renniej@RATHAUS /d/Dev/GIT/Test-rw (master)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
最后我用git push origin master将更改推送到github
现在切换到只读副本并检查git status 是否显示:
renniej@RATHAUS /d/Dev/GIT/Test-ro (master)
$ git status
# On branch master
nothing to commit, working directory clean
使用git pull origin master 更新它,我得到了(这是对单个文件 README.md 的更改):
renniej@RATHAUS /d/Dev/GIT/Test-ro (master)
$ git pull origin master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From git://github.com/jhsrennie/Test
* branch master -> FETCH_HEAD
Updating 76b02d1..5b03266
Fast-forward
README.md | 2 ++
1 file changed, 2 insertions(+)
git status 现在给出:
renniej@RATHAUS /d/Dev/GIT/Test-ro (master)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
我能想到的唯一解释是只读副本无法识别更新来自最初克隆它的同一存储库,但这至少可以说很奇怪。
【问题讨论】:
-
如果 git 告诉您在 github 的分支之前有一个提交,并且您没有从其他存储库中获取,那么您在只读副本上做了一个提交。它是如何到达那里的?
-
Weird... 在只读存储库中,您能否运行
git branch -a和git remote -v并将结果粘贴到您的问题中? -
就个人而言,我认为这是反对首先使用
git pull的另一个论点。 :-) 但是,是的,Abe Voelker 有正确的答案,这是一个混淆,git 没有意识到谁有哪些提交。
标签: git