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

Foi útil?

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.

  1. instalar o bash git (CLI)
  2. instalar p4 cli
  3. instalar python 2.7
  4. get git-p4 roteiro >> http: / /git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. colocar esse script em c / programação / arquivos / git / bin /
  6. Agora o bash git aberta ou cheque cmd por python digitação feito, p4 feito, git feito, p4 git,
  7. criar espaço de trabalho cliente chamado git.
  8. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top