Recebendo toda a história arquivos com git-P4
Pergunta
Como já mencionei em um anterior pergunta , eu sou olhando para migrar o nosso controle de origem da Perforce para git.
Olhando ao redor, eu encontrei git-p4 (você tem que cavar um pouco mais, uma vez que não está mesmo no repositório apontado pelo link. o real roteiro git-p4 mais difícil de encontrar).
Agora estou executando este script, e que importa a versão atual dos arquivos em um novo repositório git, mas não consegue obter a história, não importa o que eu faço.
Aqui está o atual uso de linha de comando que é:
P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...
Assim, a verdadeira questão é:. Se alguém conseguiu importar um P4 depósito, incluindo a história , eu gostaria de saber como você fez isso
Solução
Tente acrescentando "@all" para o caminho do arquivo. Por exemplo, este produz um repo-revisão única para mim:
python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
//depot/services/master-pom/trunk/...
Este comando importado a história completa:
python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
//depot/services/master-pom/trunk/...@all
Eu tentei usar o exemplo git-P4, mas desistiu por várias razões e escreveu minha própria bomba de fast-importação. Foi um tempo atrás, por isso alguns dos problemas pode ter sido corrigido agora: mas git-p4 teve problemas com grandes changelists (tais como a criação inicial de um ramo) (embora usando a especificação do cliente pode ter ajudado, eu não acho que eu tentei) e arquivos com o "+ S" filetype modificador (o que é ruim e mal, mas estamos habituados a usá-lo). E o meu Python-fu não foi até deixar-me corrigir os problemas que eu tinha.
EDIT:. Desde que alguém me pediu isso, aqui está
https://github.com/araqnid/p4utils tem várias coisas P4, dos quais P4 git-xfer é o P4> git (one-way) replicador. Ele tem alguns problemas, porém, devido a ser principalmente um handy-ferramenta pessoal em vez de uma verdadeira peça de infra-estrutura.
Introdução:
p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \
trunk 'release/*' 'branch/*' \
trunk=master release/*=r* branch/*=dev/*
irá clonar esse caminho forçosamente a uma "dictionary.git" bare. Os primeiros argumentos depois do caminho de base são "especificações ramo" que contam a replicador onde encontrar filiais sob a base. Os posteriores (com símbolos '=') são "especificações espelho" que contam a replicador como criar filiais locais dos importados. O ramo especificações causa "refs / remotes / P4 / trunk", "refs / remotes / P4 / release / 1.0" etc. a ser criado. O espelho características de força "refs / cabeças / mestre" de espelho "refs / telecomandos / P4 / tronco", "refs / cabeça / R1.0" de espelho "refs / telecomandos / P4 / libertação / 1.0", etc. Foi destinado como uma forma de permitir-me para selecionar ramos apenas particulares daqueles que foram replicados para se propagado para clones.
Ele tentará detectar como um ramo é criado, mas isso é um pouco de um palpite de qualquer maneira com Perforce. Além disso, não tente fazer qualquer acompanhamento ramo em tudo:. Até mesmo fusões todo o ramo não vai ser escrita como tal, desculpe
Depois do clone inicial, correndo p4-git-xfer fetch
de dentro da réplica git vai fazer uma atualização incremental. A lista de alterações alta-marca d'água é feita a partir de marks/p4
dentro do repositório git. Este é um arquivo de marcas que carrega rápido e importação, por isso, se você fizer qualquer sapateado como usar filter-branch para reescrever as coisas, cuidado você pode ter que atualizar isso também.
Não é bonito, e tem algumas questões de médio a graves; Eu usá-lo principalmente para minha própria conveniência, para isolar-me de problemas Perforce, e não como um componente de infra-estrutura criticial dia-a-dia. É one-way: Eu geralmente uso o script p4-am para aplicar patches criados por git format-patch
. Isso em si só funciona na maior parte, com maldade geral de análise, os problemas com novas linhas de fim-de-arquivo, alterações binários etc.
Outras dicas
Eu também estou tentando descobrir o git-P4. Não muito documentação lá fora, infelizmente. Eu gostaria de entrar em contato com você, como nós provavelmente pode ajudar uns aos outros.
- instalar o bash git (CLI)
- instalar p4 cli
- instalar python 2.7
- get git-p4 roteiro >> http: / /git.kernel.org/cgit/git/git.git/plain/git-p4.py
- colocar esse script em c / programação / arquivos / git / bin /
- Agora o bash git aberta ou cheque cmd por python digitação feito, p4 feito, git feito, p4 git,
- criar espaço de trabalho cliente chamado git.
- git p4 clone depo / path / @ all repo / path
apenas no caso caminho definido não funciona em variáveis ??de ambiente para python se python cria problema conjunto P4CLIENT = git
A ajuda git-P4 é realmente muito bom:
man git-p4
No Ubuntu 12.04 é incluir no pacote git-man
.