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

类似于git status的命令(或脚本),以显示自上次git svn dcommit以来的所有本地提交?,git,git-svn,Git,Git Svn,这个python脚本是迄今为止我想到的最好的脚本。我只是粗略地把它拼凑在一起,在最初几次使用中,似乎操作正确,但我情不自禁地觉得有一种更简单的方法来实现这一点,甚至还有一些内置的东西(尽管我已经搜索了又搜索) 谢谢你的帮助 #!/usr/bin/env python import sys import subprocess s = subpro

这个python脚本是迄今为止我想到的最好的脚本。我只是粗略地把它拼凑在一起,在最初几次使用中,似乎操作正确,但我情不自禁地觉得有一种更简单的方法来实现这一点,甚至还有一些内置的东西(尽管我已经搜索了又搜索)

谢谢你的帮助

#!/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) #!/usr/bin/env python 导入系统 导入子流程 s=subprocess.Popen(“git svn log--show commit--oneline”).split(“”), stdout=子流程(管道) #获取最后一次svn提交的数据 修订版,sha,message=s.stdout.readlines().pop(0).拆分(“|”) #抓取自svn重新基线以来的提交显示 s=子进程.Popen(((“git日志%s..HEAD--oneline”%sha).split(“”), stdout=子流程(管道) log=s.stdout.read().strip() 如果len(log.splitlines())>0: 打印(“%d”在svn之前提交。若要将它们推送到svn,请使用“git svn dcommit”。\n %len(log.splitlines()) 打印日志 其他: 打印“没有需要'git svn dcommit'的本地提交” 系统出口(0)
首先,执行一个
git分支-a
以列出所有远程分支:

$ git branch -a
  git-svn
对我来说,只列出了
git svn
分支,但根据传递给
git svn clone
的选项,您可能有不同的名称。然后,使用

git log git-svn..

(将您的适当名称替换为git svn)。上面的命令(注意后面的两个点
)显示了当前分支上自当前分支和
git svn
分支最近的共同祖先以来的所有提交。

在考虑了Greg的建议后,我得出以下结论:

git log remotes/trunk.. --oneline
我将用别名或小脚本包装它


这种方法有效而他的建议无效的原因是,我的remopte svn分支是
remotes/trunk
而不是
git svn
。我不知道这是否是标准的,特别是因为Greg假设git svn很好。根据此处的信息,我使用:

git config alias.svn-status\!“git log git svn..--oneline | wc | perl-ne'tr///s;s//^/;(\$commits)=拆分(//,\$,2);打印\“您的分支比git svn领先\$commits\n\””


这假设标准的
git svn
默认远程回购术语。

我将其添加到我的~/.gitconfig文件中:

svn-status = !"git log `git svn log --show-commit --oneline --limit=1 | awk '{print $3}'`..HEAD --oneline"
如果有任何需要dcommit的更改,它会提供方便的短消息,如果您是最新的,则不会显示任何内容(假设您已经进行了重新基址或获取)。如果愿意,也可以将参数修改为外部git日志。

其中一个(它们是同义词):


这个命令对我不起作用,git报告了致命的歧义。我尝试了“git log--git svn..”和“git log--git svn..HEAD”,但都没有显示正确的提交。转换“-”和“git svn..”的顺序也是一样。@nicholas:这个命令对我有效,我不确定git会为你报告什么样的“致命歧义”。如果您执行一个
git分支-a
,那么
git svn
列出了多少次?请参阅我对自己问题的回答。我没有git svn分支,而是有一个remotes/trunk。不知道为什么我们的设置不同。。。我在克隆时使用了标准布局。我的设置可能与您的不同,因为我只克隆了主干,而没有克隆任何其他Subversion分支。在任何情况下,我的答案都已更新以适用于任何情况。我已使用有关git svn远程跟踪分支名称的更多信息更新了我的答案。答案更简单,并且执行完全相同的操作。
git svn dcommit --dry-run
git svn dcommit -n