2 votes

Questions de planification de dépôt Git

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.

  1. 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, puis git 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.

  2. 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?

  3. 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 ...

2voto

meagar Points 85475

En réponse à la question #1, si vous voulez vraiment avoir l'intégralité de votre répertoire personnel dans un dépôt git, mais avoir ~/p4 dans un dépôt séparé, ajoutez simplement "p4" à .git_ignore dans votre répertoire personnel, et créez un autre dépôt dans p4 :

$ cd ~
$ git init
$ echo "p4" > .git_ignore
$ git add .git_ignore
# ajouter tous les fichiers/répertoires sauf p4
$ git commit
$ cd p4
$ git init
$ git add .
$ git commit

Je ne suis pas tout à fait sûr de comprendre la question #2, mais oui, vous pouvez tirer d'un dépôt "remote" qui est local à votre système de fichiers. En ce qui concerne le "pull" depuis des branches locales, ce n'est pas un pull ; un pull implique une récupération et une fusion. Si vous omettez la récupération, c'est simplement une fusion, donc vous parlez vraiment de fusionner à partir d'une branche locale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X