Подтвердить что ты не робот

Как узнать, что было проверено в git, но не было передано svn через dcommit?

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

4b9b3361

Ответ 1

Опция --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 дает более точную картину того, что должно произойти, даже если это труднее интерпретировать.)

Ответ 2

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

gitk --all

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

Ответ 3

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

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

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

Ответ 4

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

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

вывод:

c2e1eff changed a thing
a889dbf changed a second thing
18a4653 undid the second thing-- oops