类似于git status的命令(或脚本)显示自上次git svn dcommit以来的所有本地提交?

时间:2010-01-19 22:39:40

标签: git git-svn

这个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)

5 个答案:

答案 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