Как узнать, что было проверено в git, но не было передано в svn через dcommit? - PullRequest
13 голосов
/ 18 мая 2011

Я использую git-svn.Как я могу получить список того, что я зафиксировал в git, но еще не фиксировал SVN-репозиторий с момента последнего git svn dcommit?То есть как я могу проверить, что будет отправлено, если я сделаю dcommit?

Ответы [ 4 ]

13 голосов
/ 18 мая 2011

Опция --dry-run для git svn dcommit очень полезна для точного определения того, что будет совершено в Subversion. В частности это имеет свойства, которые:

  • На самом деле он ничего не передает Subversion
  • Он сообщает вам, какие различия будут рассчитаны для создания новых ревизий в Subversion
  • Он сообщает вам, какую ветку в Subversion вы будете фиксировать - это иногда неочевидно, поскольку оно берется из ветви Subversion, указанной в первом коммите-предке, с git-svn-id в его сообщении о коммите

В целом, лучше сделать git svn rebase, прежде чем даже подумать об использовании dcommit, чтобы ваша история была линеаризована - в противном случае фиксация слиянием может не иметь большого смысла в истории Subversion. (Если вы это сделали, то git log и gitk --all также будут по существу эквивалентны, но я думаю, что git svn dcommit --dry-run даст вам более точное представление о том, что должно произойти, даже если его труднее интерпретировать.)

1 голос
/ 19 июня 2015

Чтобы увидеть список коммитов, вот моя магия:

git svn dcommit -n  | sed 1d | cut -d" " -f3 | xargs -I{} git log --oneline --no-walk {}

output:

c2e1eff changed a thing
a889dbf changed a second thing
18a4653 undid the second thing-- oops
1 голос
/ 18 мая 2011

Я использую git log --oneline --graph:

* aaaaaaa commit message
*   bbbbbbb commit message 
|\  
| * ccccccc commit message
| * ddddddd commit message
| * eeeeeee commit message
|/  
*   fffffff commit message 
|\  
...

Легко видеть, что коммиты aaaaaaa, bbbbbbb и fffffff находятся в текущей (основной) ветке. Эти коммиты уже были или будут зафиксированы в Subversion при следующем выполнении git svn dcommit. (Коммиты ccccccc, ddddddd, eeeeeee находятся в отдельной ветви, которая была объединена с мастером и не будет передана в Subversion как отдельные коммиты .)

1 голос
/ 18 мая 2011

Я думаю, что проще всего сделать это, используя gitk. Вам понадобится опция --all, чтобы увидеть все ветви. Если вы не использовали его раньше, просто наберите:

gitk --all

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

...