我是Git新手。我最近把一个Rails项目从Subversion转移到Git。我遵循了这里的教程:http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
我还使用unfuddle.com来存储我的代码。我在上班/下班的火车上对我的Mac笔记本电脑进行更改,然后在我有网络连接时,使用以下命令将它们推到不稳定状态:
git push unfuddle master
我使用Capistrano进行部署,并使用主分支从unduddle存储库中提取代码。
最近,当我在笔记本电脑上运行“git status”时,我注意到下面的消息:
# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)
我很困惑为什么。我以为我的笔记本电脑是源头…但不知道是否我最初从Subversion或推送到unduddle是导致消息显示的原因。我怎样才能:
找出Git认为“源/主”在哪里?
如果是在其他地方,我如何把我的笔记本电脑变成“源/主”?
让这条信息消失。这让我觉得Git对某些事情不满意。
我的mac运行的是Git 1.6.0.1版本。
当我按照dbr的建议运行git remote show origin时,我得到以下结果:
~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
当我按照Aristotle Pagaltzis的建议运行git remote -v时,我得到以下结果:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle git@spilth.unfuddle.com:spilth/geekfor.git
现在,有趣的是,我在geekfor目录中处理我的项目,但它说我的原点是gf目录中的本地机器。我相信gf是我在将项目从Subversion转换到Git时使用的临时目录,可能也是我从那里推送到unduddle的地方。然后我相信我检查了一个新的副本从unuddle到geekfor目录。
所以看起来我应该遵循dbr的建议,这样做:
git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
我正在与这个问题作斗争,之前的答案都没有解决我所看到的问题。我已经把问题还原到最基本的部分,看看能不能把问题说清楚。
我创建了一个新的存储库(rep1),放入一个文件并提交。
mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"
我创建了rep1的克隆,并将其称为rep2。我查看了rep2内部,看到文件是正确的。
cd ~
git clone ~/rep1 rep2
cat ~/rep2/README
在rep1中,我对文件进行了单个更改并提交。然后在rep1中,我创建了一个指向rep2的远程并推动更改。
cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master
现在,当我进入rep2并执行'git status'时,我被告知我在origin之前。
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README
#
rep2中的README与第二次提交之前的README相同。我所做的唯一修改是rep1,我想做的就是把它们推到rep2。我没有抓住什么?
在git的一般方案中,我提出这个问题是想了解“您的分支领先于……”这条消息的含义。这里没有答案,但由于这个问题目前出现在谷歌的顶部,当你搜索短语“你的分支在‘起源/主’之前”时,我已经弄清楚了这条消息的真正含义,我想我应该在这里发布信息。
So, being a git newbie, I can see that the answer I needed was a distinctly newbie answer. Specifically, what the "your branch is ahead by..." phrase means is that there are files you've added and committed to your local repository, but have never pushed to the origin. The intent of this message is further obfuscated by the fact that "git diff", at least for me, showed no differences. It wasn't until I ran "git diff origin/master" that I was told that there were differences between my local repository, and the remote master.
所以,明确一点:
“你的树枝领先……”=>需要推送到远程主服务器。运行"git diff origin/master"查看本地存储库和远程主存储库之间的差异。
希望这能对其他新手有所帮助。
(此外,我认识到有一些配置上的微妙之处可能会部分地使这个解决方案无效,例如主服务器实际上可能不是“远程”的事实,以及“origin”是根据约定使用的可重新配置的名称,等等。但是新手们并不关心这类事情。我们想要简单直接的答案。一旦我们解决了这个紧迫的问题,我们可以稍后阅读其中的微妙之处。)
Earl