Simples svn revert
foi suficiente para o pôster original. No entanto, um simples svn revert
não funcionará no caso mais geral em que você
- tenha as edições que você deseja compartilhar e edições que não deseja compartilhar no mesmo arquivo ,
- tenha alterações locais que você ainda deseja manter em benefício próprio .
A sugestão do @ ErichBSchulz de usar git add -p
é muito razoável e muito mais geralmente aplicável nesse caso. A resposta estava faltando alguns detalhes. Supondo que seu diretório atual seja o diretório que você deseja criar o patch compartilhável, você pode fazer algo assim:
Faça o checkout da versão original do subversion para um diretório diferente (escolha um nome de diretório que não exista, aqui usando o subdiretório TMP/
).
$ url=$(svn info . | awk '/^URL/ {print $2}')
$ svn checkout "$url" TMP
Usando esse svn checkout como base, inicie um repositório git, ignorando os diretórios .svn; comprometa tudo no svn head ao seu repositório temporário git
$ cd TMP
$ git init && echo ".svn/" > .gitignore
$ git add -A && git commit
$ cd ..
Copie os metadados do repositório git recém-preparados para o diretório de trabalho original; como o diretório de verificação de subversão não é necessário, você pode se livrar dele. Seu diretório de trabalho agora é o repositório git e subversion:
$ mv TMP/.git .
$ rm -rf TMP/
Agora você pode usar o poderoso e conveniente git add -p
para escolher interativamente exatamente o que deseja compartilhar e enviá-los ao seu repositório git. Se você precisar adicionar arquivos à confirmação, faça também git add <file-to-add>
antesgit commit
$ git add -p
<interactively select (and edit) the chunks you want to share>
$ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
$ git commit
Usando a confirmação, prepare um patch que você deseja compartilhar. Para esse fim, você também pode usar git diff HEAD^..HEAD
, ou git format-patch
(o último pode ser usado para preparar diretamente e-mails a serem enviados contendo o patch ou vários patches):
$ git show -p HEAD > my-mighty-patch.patch
Para se livrar dos metadados do git, basta fazê-lo rm -rf .git/
. Se você planeja continuar invadindo o diretório de trabalho original, pode continuar usando git
para gerenciar suas alterações locais. Nesse caso, você provavelmente se beneficiaria do investimento em aprender a usar git svn
.
Nota: Se você está familiarizado com git
isso, é algo trivial improvisar. Caso contrário, isso pode parecer um pouco confuso. Você pode generalizar a abordagem escrevendo um script com estas etapas para implementar um "commit interativo" ou "criação de patch interativa" para o svn que pode ser usado sem o conhecimento do git.