Problema
Como você cria uma cópia superficial com o git-svn a partir de um repositório Subversion, por exemplo, como você extrai apenas as últimas três revisões?
O git clone
comando pode obter as últimas n revisões de um repositório Git se você usar a opção --depth
, ou seja, você obtém uma cópia superficial do repositório. Exemplo:
git clone --depth 3 git://some/repo myshallowcopyrepo
Existe uma opção semelhante para o git-svn?
Minhas descobertas até agora
Até agora, só encontrei a -rN
opção onde N
está a revisão. Exemplo:
git svn clone -rN svn://some/repo
De acordo com a documentação, existe a possibilidade de uso -r$REVNUMBER:HEAD
. Tentei o seguinte para obter as últimas 3 revisões, que retornaram uma mensagem de erro.
$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn
Então substituí HEAD~3
pelo número real da terceira mas última revisão 534. Isso funcionou, mas isso exige que eu primeiro descubra o número da revisão da terceira mas última confirmação.
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Documentação
-s is for --stdlayout which presumes the svn recommended layout for tags, trunk, and branches.
(mas não funcionou para mim)--depth
paragit svn
, uma vez que o apoio já está lá. E ele já tem que descobrir a última rev do servidor?Respostas:
Você já descobriu a maneira mais simples de especificar um clone superficial no Git-SVN, especificando o número de revisão do SVN no qual deseja iniciar o clone (
-r$REV:HEAD
).Por exemplo:
git svn clone -s -r1450:HEAD some/svn/repo
A estrutura de dados do Git é baseada em ponteiros em um gráfico acíclico direcionado (DAG), o que torna trivial a recuperação de
n
confirmações. Mas no SVN (e, portanto, no Git-SVN), você terá que encontrar o número da revisão.fonte
git-svn
apontador remoto no mesmo local e usandogit-svn fetch
para obter mais da árvore. Nesse ponto, você precisa usargit filter-branch
para reparar a árvore antiga (parcial) no ramo direito.n
commits ...Eu me pego usando o seguinte frequentemente para obter um número limitado de revisões de nossa enorme árvore de subversões (em breve estaremos alcançando a revisão 35000 da svn).
E uma boa maneira de descobrir onde uma ramificação começou é fazê-
svn log
la e encontrar a primeira na ramificação (a última listada ao fazer):Até agora, eu realmente não achei o aborrecimento que valha a pena acompanhar todas as filiais. Leva muito tempo para clonar e svn e git não funcionam juntos tão bem quanto eu gostaria. Costumo criar arquivos de correção e aplicá-los no clone git de outro ramo svn.
fonte
cherry-pick
/rebase
entre eles. A consolidação dá um passo extra (push
e depoisdcommit
do repo remoto), mas acho que vale a pena a troca.... 7 anos depois, no deserto, uma erva daninha sopra por ...
Não fiquei satisfeito com a resposta aceita, então criei alguns scripts para fazer isso por você, disponíveis no Github . Isso deve ajudar quem deseja usar,
git svn clone
mas não deseja clonar o repositório inteiro e não deseja procurar uma revisão específica para clonar no meio da história (talvez você esteja clonando um monte de repositórios). Aqui podemos apenas clonar as últimas N revisões:Use
git svn clone
para clonar as últimas 50 revisõesEncontre a revisão N anterior de um repositório SVN
fonte