Команда (или скрипт), аналогичная git status, чтобы показать все локальные коммиты с момента последнего git svn dcommit? - PullRequest
4 голосов
/ 20 января 2010

Этот скрипт на 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)

Ответы [ 5 ]

3 голосов
/ 20 января 2010

Поэкспериментировав с предложением Грега, я в итоге получил:

git log remotes/trunk.. --oneline

, который я или псевдоним или оберну в небольшой скрипт.

Причина, по которой это работает, и егопредложение не состоит в том, что моя ветвь remopte svn remotes/trunk не git-svn.Я не знаю, является ли это стандартным или нет, тем более, что Грег предположил git-svn.

3 голосов
/ 20 января 2010

Сначала выполните git branch -a, чтобы получить список всех удаленных веток:

$ git branch -a
  git-svn

Для меня указана только ветка git-svn, но у вас могут быть разные имена в зависимости от того, какие опции вы передали git svn clone. Затем используйте

git log git-svn..

(заменяя ваше подходящее имя на git-svn). Приведенная выше команда (обратите внимание на две конечные точки ..) показывает все коммиты в текущей ветви , начиная с ближайшего общего предка 1015 * текущей ветви и ветви git-svn. 1017 *

0 голосов
/ 24 июля 2012

Один из (это синонимы):

git svn dcommit --dry-run
git svn dcommit -n
0 голосов
/ 25 декабря 2010

Я добавил это в свой файл ~ / .gitconfig:

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

, который выдает удобные короткие сообщения, если есть какие-либо изменения, требующие dcommit, и ничего не показывает, если вы в курсе (при условии, что вы сделали ребаз или выборку). Вы можете изменить параметры внешнего git-журнала, если хотите.

0 голосов
/ 14 октября 2010

Nice. Основываясь на информации здесь, я использую:

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 по умолчанию.

...