这个python脚本是我迄今为止提出的最好的。我只是将它一起砍掉,并且在粗略的第一对使用中,似乎表现得正确,但我不禁感到有一种更容易的方法来做到这一点,甚至内置的东西(虽然我已经搜索和搜索过)。 / p>
感谢您的帮助。
#!/usr/bin/env python import sys import subprocess s = subprocess.Popen("git svn log --show-commit --oneline".split(" "), stdout=subprocess.PIPE) # Grab the last svn commit's data revision, sha, message = s.stdout.readlines().pop(0).split(" | ") # Grab display of commits since svn rebase s = subprocess.Popen(("git log %s..HEAD --oneline" % sha).split(" "), stdout=subprocess.PIPE) log = s.stdout.read().strip() if len(log.splitlines()) > 0: print ("%d commits ahead of svn. To push them to svn, use 'git svn dcommit'.\n" % len(log.splitlines())) print log else: print "No local commits that need 'git svn dcommit'" sys.exit(0)
答案 0 :(得分:3)
首先,执行git branch -a
列出所有远程分支:
$ git branch -a
git-svn
对我来说,只列出了git-svn
分支,但根据您传递给git svn clone
的选项,您可能会有不同的名称。然后,使用
git log git-svn..
(用适当的名称代替git-svn
)。上面的命令(注意两个尾随点..
)显示了当前分支上的所有提交,因为当前分支的最近的共同祖先和{{ 1}}分支。
答案 1 :(得分:3)
在谈到格雷格的建议之后,我最终得到了这个:
git log remotes/trunk.. --oneline
我将使用别名或包装在一个小脚本中。
这个有效的原因和他的建议不是我的remopte svn分支是remotes/trunk
而不是git-svn
。我不知道这是否是标准的,特别是因为Greg假设git-svn
。
答案 2 :(得分:0)
尼斯。根据这里的信息,我使用:
git config alias.svn-status \!"git log git-svn.. --oneline |wc|perl -ne 'tr/ //s;s/^ //;(\$commits)=split(/ /,\$_,2);print \"Your branch is ahead of git-svn by \$commits commits\n\"'"
这假设标准的git-svn
默认远程回购命名法。
答案 3 :(得分:0)
我将它添加到我的〜/ .gitconfig文件中:
svn-status = !"git log `git svn log --show-commit --oneline --limit=1 | awk '{print $3}'`..HEAD --oneline"
如果有任何需要dcommit的更改,它会提供方便的短消息,如果您是最新的(假设您已经完成了rebase或fetch),则不会显示任何内容。如果你愿意的话,你可以修改外部git-log的参数。
答案 4 :(得分:0)
其中一个(他们是同义词):
git svn dcommit --dry-run
git svn dcommit -n