No SVN, fazer svn update
mostrará uma lista de caminhos completos com um prefixo de status:
$ svn update
M foo/bar
U another/bar
Revision 123
Eu preciso de obter esta lista de atualização para fazer algum trabalho pós-processo. Depois de ter transferido o repositório SVN para o Git, não consigo encontrar uma maneira de obter a lista de atualização:
$ 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 +-
Eu posso traduzir a lista de status do Git Pull para o formato do 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
No entanto, algumas entradas com nomes de caminho longos são abreviadas, como uni/package/cooldeb/update-and-deb-redist
é abreviado como ...update-and-deb-redist
.
Eu acho que posso fazer com o Git diretamente, talvez eu possa configurar a saída de git pull
em formato especial.
Alguma ideia?
EDITAR
Eu descobri uma resolução para isso:
Primeiro, salve o último e o atual commit na variável PREV
e NEXT
:
$ PREV='git show --format=format:%H --summary | head -1'
$ git pull
$ NEXT='git show --format=format:%H --summary | head -1'
E, em seguida, compare os dois commits usando um formato especial:
$ git diff --name-status $PREV $NEXT
Isso fornecerá a saída:
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
...
Qual é exatamente o mesmo que o do Subversion.
Depois, também é fácil fazer isso no modo de visualização:
$ 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