Я использую git -svn. Как я могу получить список того, что я зафиксировал в git, но еще не зафиксирован в SVN-репозитории с момента последнего git svn dcommit
? То есть, как я могу проверить, что будет отправлено, если я сделаю dcommit?
Как узнать, что было проверено в git, но не было передано svn через dcommit?
Ответ 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