2010-04-29 7 views
9

Mon dépôt p4 a une structure similaire à:Comment faire pour que --detect-branches fonctionne avec git-p4?

//depot/project/branch1 
//depot/project/branch2 
//depot/project/branch3 
... etc 

Cependant, lorsque j'utilise git-p4 pour cloner « projet », les 3 branches ne sont pas considérés comme des branches et tous se clonés dans la branche maître unique.

Voici comment j'invoque git-p4:

git-p4 clone --detect-branches //depot/project 

Je me attendais git-p4 pour créer une base de données de git pour « project » à trois branches et la racine du projet sera mis en correspondance avec la partie le chemin après le nom de la branche (par exemple: si //depot/project/branch1 a un sous-répertoire appelé "lib" (//depot/project/branch1/lib) alors mon système de fichiers local devrait ressembler à /git_project/lib avec 3 branches git).

Est-ce que je m'attends à tort? Est-ce que j'appelle git-p4 incorrectement?

+0

Avez-vous déjà eu de la chance, Michael? J'ai beaucoup de problèmes avec cela, même en utilisant les spécifications de branche comme décrit sur de nombreux sites Web. –

Répondre

1

Si vous regardez git-p4 code (également originally here), vous voyez:

if self.detectBranches: 
    branches = self.splitFilesIntoBranches(description) 
    for branch in branches.keys(): 
    ## HACK --hwn 
    branchPrefix = self.depotPaths[0] + branch + "/" 

avec splitFilesIntoBranches explorer la mise en pension pour les branches p4.

Alors peut-être git-p4 clone //depot/[email protected] --detect-branches serait bien (avec le @all comme dans ce SO answer, et l'option --detect-branches après le chemin repo)? Cela dit, si le script n'est pas assez intelligent pour gérer cela, une solution plus simple consiste à l'exécuter 3 fois, une par branche et à importer le résultat dans un repo Git.

+0

J'ai essayé le "@all". Cependant, cela ne fonctionne peut-être pas à cause de parenthèses dans d'autres parties du dépôt? La branche mentionnée dans la sortie ci-dessous ne réside pas dans la partie du dépôt que j'essaie de cloner (elle est plus haut).(J'ai masqué les noms de projet et les noms d'utilisateur avec "PROJECT" et "USER") –

+0

Référentiel Git vide initialisé dans /cygdrive/c/projects/PROJECT/.git/ /bin/sh: -c: ligne 0: erreur de syntaxe proche du jeton inattendu '(' /bin/sh: -c: ligne 0:' p4 -G branche -o dev_OtherProject (ASP.Net) _USER' Importation de la révision 181332 (0%) Importation d'une nouvelle branche PROJECT/Main/dotNet Reprise avec le changement 181332 fatale: nom ref non valide ou expression SHA1: refs/remotes/p4/PROJET/Livraison/dotNet import-rapide: le dumping rapport d'accident à .git/fast_import_crash_1832 ne serait-exécuter 3 fois, une par branche, créez 3 dépôts git? Je pensais que git-p4 clone faisait toujours un nouveau dépôt. –

0

Je viens de travailler sur un bug connexe avec --detect-branches. Le script fait quelques choses:

  1. détectent les noms de branche en utilisant des données p4
  2. créer une carte du parent de chaque branche
  3. carte les fichiers à une branche spécifique
  4. supprimer le préfixe de branche avant validation dans git

Vous devrez suivre le code pour vous assurer que chaque étape est effectuée correctement. Utiliser pdb pour ce faire fonctionne assez bien.

Étape 1 et 2 se fait dans P4Sync.getBranchMapping

Étape 3 se fait en P4Sync.splitFilesIntoBranches

Pour l'étape 4. cela se fait avec P4Sync.stripRepoPath. Définissez un point d'arrêt ici et vous pouvez voir si les branches ont été détectées et si les fichiers sont renommés correctement.

Questions connexes