【问题标题】:Command (or script) similar to git status to show all local commits since last git svn dcommit?命令(或脚本)类似于 git status 以显示自上次 git svn dcommit 以来的所有本地提交?
【发布时间】:2012-07-24 09:45:05
【问题描述】:

这个 python 脚本是我迄今为止想出的最好的。我只是将它一起破解,并且粗略地进行了前几次使用,似乎表现正确,但我不禁觉得有一种更简单的方法可以做到这一点,甚至是内置的东西(尽管我已经搜索和搜索过)。

感谢您的帮助。

#!/usr/bin/env python 导入系统 导入子流程 s = subprocess.Popen("git svn log --show-commit --oneline".split(" "), 标准输出=子进程.PIPE) # 获取最后一个 svn commit 的数据 修订,sha,消息 = s.stdout.readlines().pop(0).split(" | ") # 抓取显示自 svn rebase 以来的提交 s = subprocess.Popen(("git log %s..HEAD --oneline" % sha).split(" "), 标准输出=子进程.PIPE) 日志 = s.stdout.read().strip() 如果 len(log.splitlines()) > 0: print ("%d 在 svn 之前提交。要将它们推送到 svn,请使用 'git svn dcommit'。\n" % len(log.splitlines())) 打印日志 别的: print "没有需要'git svn dcommit'的本地提交" 系统退出(0)

【问题讨论】:

    标签: git git-svn


    【解决方案1】:

    在尝试了 Greg 的建议后,我最终得到了这个:

    git log remotes/trunk.. --oneline
    

    我将使用别名或包装在一个小脚本中。

    这行得通而他的建议不起作用的原因是我的远程 svn 分支是remotes/trunk 而不是git-svn。我不知道这是否是标准的,特别是因为 Greg 假设为git-svn

    【讨论】:

    • 我已经更新了我的答案,提供了有关 git-svn 远程跟踪分支名称的更多信息。
    【解决方案2】:

    首先,使用git branch -a 列出所有远程分支:

    $ git branch -a
      git-svn
    

    对我来说,只列出了git-svn 分支,但您可能有不同的名称,具体取决于您传递给git svn clone 的选项。然后,使用

    git log git-svn..
    

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

    【讨论】:

    • 这个命令对我不起作用,git 报告致命的歧义。我尝试了“git log -- git-svn..”和“git log -- git-svn..HEAD”,但都没有显示正确的提交。切换“--”和“git-svn..”的顺序也不行。
    • @nicholas:该命令对我有用,我不确定 git 可能会为您报告哪种“致命的歧义”。如果您执行git branch -agit-svn 列出了多少次?
    • 查看我对自己问题的回答。我没有 git-svn 分支,而是有一个遥控器/主干。不知道为什么我们的设置不同...克隆时我使用了标准布局。
    • 我的设置可能与你的不同,因为我专门克隆了 just 主干,而不是任何其他 Subversion 分支。无论如何,我的答案已经更新以适用于任何情况。
    【解决方案3】:

    很好。根据此处的信息,我使用:

    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 默认远程回购命名法。

    【讨论】:

      【解决方案4】:

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

      svn-status = !"git log `git svn log --show-commit --oneline --limit=1 | awk '{print $3}'`..HEAD --oneline"
      

      如果有任何需要 dcommit 的更改,它会提供方便的短消息,如果您是最新的(假设您已经完成了 rebase 或 fetch),则不会显示任何内容。如果您愿意,也可以将参数修改为外部 git-log。

      【讨论】:

      【解决方案5】:

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

      git svn dcommit --dry-run
      git svn dcommit -n
      

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 2014-08-23
        • 1970-01-01
        • 2014-09-01
        • 2011-02-24
        • 1970-01-01
        • 2010-10-12
        • 2010-09-30
        • 2016-11-17
        相关资源
        最近更新 更多