Au travail, le développement utilise Perforce pour gérer le partage de code. Je ne dirai pas "contrôle de révision", car nous ne sommes pas autorisés à valider les changements avant qu'ils ne soient prêts pour les tests de régression. Afin de mettre mes ensembles de changements personnels sous contrôle de révision, j'ai reçu l'autorisation de construire ma propre version de git et d'initialiser la vue client du dépôt Perforce en tant que dépôt git.
Cependant, il y a quelques difficultés pour le faire.
-
La vue client vit dans un sous-dossier de
~
, (~/p4
), et je veux mettre~
sous contrôle de révision également, avec son propre historique séparé. Je n'arrive pas à comprendre comment conserver l'historique de~
séparé de~/p4
sans utiliser de sous-module. Le problème avec un sous-module est que j'ai l'impression de devoir créer un dépôt qui deviendra le sous-module, puisgit submodule add
. Mais il n'y a pas d'endroit pour créer le dépôt du sous-module sauf dans~
. Il semble ne pas y avoir d'endroit sûr pour créer la vue client initiale du dépôt avec git p4 clone.(Je pars du principe que l'initialisation ou le clonage d'un dépôt dans un sous-répertoire d'un dépôt git n'est pas pris en charge. En tout cas, je ne trouve rien d'officiel sur les dépôts git imbriqués.)
edit: Le simple fait d'ignorer
~/p4
dans le dépôt enraciné à~
suffit-il à me permettre d'initialiser un dépôt imbriqué dans~/p4
? Ma fonction __git_ps1 pense toujours que je suis dans un dépôt git lorsque je visite un sous-répertoire ignoré d'un dépôt git, donc je suis enclin à penser que non. -
J'ai besoin que le dépôt "distant" créé par git p4 sync soit une branche dans ~/p4. Nous sommes tenus de garder tout notre code dans ~/p4 pour qu'il ne soit pas sauvegardé. Puis-je tirer d'une branche "distant" qui est en réalité une branche locale?
-
Celui-ci est juste pour la commodité, mais je pensais pouvoir apprendre quelque chose en posant la question. Pour 99% du projet, je veux juste commencer avec la révision principale de p4 comme objet de commit initial. Pour l'autre 1%, j'aimerais télécharger l'ensemble de l'historique p4 pour pouvoir le parcourir dans git. En d'autres termes, une fois que je l'aurai initialisé, le commit initial de la branche remotes/p4/master contiendra:
révision 1 de //depot/prod/Foo/Bar/* révision X d'autres fichiers dans //depot/prod/*, où X est la révision principale
et la branche
remotes/p4/master
contient Y commits, où Y est le nombre de listes de changements qui avaient un fichier dans//depot/prod/Foo/Bar/*
, chaque commit dans l'historique correspondant à l'une de ces listes de changements de p4, et HEAD ressemblant à la révision principale de p4.
Edit: la réponse de meagar n'a pas tout à fait fonctionné pour moi.
J'ai initialisé ~ et validé quelques commits. J'ai ignoré ~/p4 et ~/p4 n'est dans aucun objet commit.
[~@ernie02] (master) $ git show HEAD:p4
fatal: Le chemin 'p4' existe sur le disque, mais pas dans 'HEAD'.
Je suis ensuite allé à ~/p4/prod, une branche que je veux récupérer. Mais ce dépôt est cassé:
[~/p4/prod@ernie02] (master) $ git log
(montre le journal pour le dépôt enraciné à ~)
[~/p4/prod@ernie02] (master) $ git init
Dépôt Git vide initialisé dans ~/p4/prod/.git/
[~/p4/prod@ernie02] (master) $ git log
fatal: mauvaise révision par défaut 'HEAD'
Modifier l'édition: Oops, j'ai oublié de commettre quelque chose à ~/p4/prod
. J'essaie maintenant un git p4 sync //depot/prod dessus ...