我是一个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
Run Code Online (Sandbox Code Playgroud)
我使用Capistrano进行部署,并使用master分支从unfuddle存储库中提取代码.
最近,当我在笔记本电脑上运行"git status"时,我注意到以下消息:
# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么.我以为我的笔记本电脑是原产地...但不知道我最初是从Subversion拉出来还是推送到Unfuddle,这是导致消息显示的原因.我怎么能够:
我的mac正在运行Git版本1.6.0.1.
当我git remote show origin按照dbr的建议运行时,我得到以下内容:
~/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
Run Code Online (Sandbox Code Playgroud)
当我git remote -v按照Aristotle Pagaltzis的建议跑步时,我得到以下信息:
~/Projects/GeekFor/geekfor 10:33 AM $ git …Run Code Online (Sandbox Code Playgroud) 我在Git中设置了大量项目,这些项目以前是在CVS中管理的.如果我对尚未发送到中央服务器的存储库进行了更改,那么Tortoise CVS以及Eclipse都很容易看到(通过图标叠加).
有没有一种方便的方法来实现这一点与Git?我真的不需要图标叠加 - 我只需要知道在将我的分支与原始分支进行比较时是否有突出的变化.我不介意使用某种脚本来查询所有的Git回购.
之前的一个问题产生了一些关于如何检查你的Git repo是否包含脏索引或未跟踪文件的想法.我从讨论中得出的答案如下:
#!/bin/sh
exit $(git status --porcelain | wc -l)
Run Code Online (Sandbox Code Playgroud)
这个答案背后的想法是模仿程序员会做什么:运行git status然后检查输出.
不幸的是git status --porcelain,git status并没有完全相同的事情.特别是,git status将报告未按下的更改,而git status --porcelain不会.这是一个例子
[jarmo@localhost math-hl]$ git status --porcelain
[jarmo@localhost math-hl]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:我需要添加到原始脚本中以确定何时repo已经未按下更改?特别是,这是一种正确的方法吗?
#!/bin/bash
if [ $(git status --porcelain | wc -l) != …Run Code Online (Sandbox Code Playgroud)