В SVN svn update
покажет список полных путей с префиксом статуса:
$ svn update
M foo/bar
U another/bar
Revision 123
Мне нужно получить этот список обновлений, чтобы выполнить некоторую постобработку. После того, как я перенес SVN-репозиторий в Git, я не могу найти способ получить список обновлений:
$ git pull
Updating 9607ca4..61584c3
Fast-forward
.gitignore | 1 +
uni/.gitignore | 1 +
uni/package/cooldeb/.gitignore | 1 +
uni/package/cooldeb/Makefile.am | 2 +-
uni/package/cooldeb/VERSION.av | 10 +-
uni/package/cooldeb/cideb | 10 +-
uni/package/cooldeb/cooldeb.sh | 2 +-
uni/package/cooldeb/newdeb | 53 +++-
...update-and-deb-redist => update-and-deb-redist} | 5 +-
uni/utils/2tree/{list2tree => 2tree} | 12 +-
uni/utils/2tree/ChangeLog | 4 +-
uni/utils/2tree/Makefile.am | 2 +-
Я могу перевести список статуса Git pull в формат SVN:
M .gitignore
M uni/.gitignore
M uni/package/cooldeb/.gitignore
M uni/package/cooldeb/Makefile.am
M uni/package/cooldeb/VERSION.av
M uni/package/cooldeb/cideb
M uni/package/cooldeb/cooldeb.sh
M uni/package/cooldeb/newdeb
M ...update-and-deb-redist => update-and-deb-redist}
M uni/utils/2tree/{list2tree => 2tree}
M uni/utils/2tree/ChangeLog
M uni/utils/2tree/Makefile.am
Однако некоторые записи, имеющие длинные имена путей, сокращаются, например, uni/package/cooldeb/update-and-deb-redist
сокращается до ...update-and-deb-redist
.
Я считаю, что могу работать с Git напрямую, может быть, я могу настроить вывод git pull
в специальном формате.
Любая идея?
РЕДАКТИРОВАТЬ
Я нашел решение для этого:
Сначала сохраните последний и текущий коммит в переменную PREV
и NEXT
:
$ PREV=`git show --format=format:%H --summary | head -1`
$ git pull
$ NEXT=`git show --format=format:%H --summary | head -1`
А затем сравните два коммита в специальном формате:
$ git diff --name-status $PREV $NEXT
Это даст вывод:
A .gitignore
M uni/.gitignore
A uni/package/cooldeb/.gitignore
M uni/package/cooldeb/Makefile.am
M uni/package/cooldeb/VERSION.av
M uni/package/cooldeb/cideb
M uni/package/cooldeb/cooldeb.sh
...
Что точно так же, как у Subversion.
Затем это также легко сделать в режиме предварительного просмотра:
$ PREV=`git show --format=format:%H --summary | head -1`
$ git stash
$ git pull
$ NEXT=`git show --format=format:%H --summary | head -1`
$ git diff --name-status $PREV $NEXT
$ git reset --hard $PREV
$ git stash pop