Familier avec git, première utilisation par force.

Je travaille sur ma propre fonctionnalité que je ne voudrais pas pousser vers le référentiel distant principal.

J'ai besoin de quelque chose comme les branches distantes git où :

  1. Je peux valider mes modifications. Quelque chose comme git commit

  2. Je peux pousser vers une branche privée distante qui ne fusionne pas. Quelque chose comme git push remote my-branch

  3. Peut fusionner les modifications de la ligne principale dans ma branche. Quelque chose comme git merge master.

J'essaie de comprendre les branches p4, mais je confond beaucoup avec la terminologie entre p4 integrate et p4 branch. De plus, toutes les étapes mènent à p4 submit qui se soumet à la ligne principale au lieu de ma branche. Existe-t-il un moyen de soumettre à une branche privée distante ?

J'ai essayé les étapes de la branche p4 ici : https://www .perforce.com/perforce/doc.973/cmdguide/html/branchin.htm Mais cela n'a pas conduit à se soumettre à une branche distante privée.

2
roadrev 10 oct. 2019 à 23:44

1 réponse

Meilleure réponse

Perforce a un mode DVCS qui ressemble un peu à git, mais à moins qu'il n'y ait une raison impérieuse de ne pas le faire (comme une connectivité limitée ou de sévères contraintes de ressources sur le serveur), la façon typique d'utiliser Perforce est de tout faire directement sur le serveur central (le " référentiel distant"). p4 submit dans le modèle typique est essentiellement git commit + git push, car votre "commit" va directement au serveur distant.

Ainsi, lorsque vous créez une branche, vous le faites également sur le serveur. Les branches dans Perforce sont simplement des dossiers qui sont copiés à partir d'autres dossiers (avec beaucoup de sémantique de suivi de fusion construite sur cette simple opération de copie), donc pour créer votre nouvelle branche de fonctionnalité à partir de //depot/main, vous pouvez exécuter quelque chose comme :

p4 integ //depot/main/... //depot/features/road-rev/...
p4 submit

Cela crée une nouvelle branche dans le dépôt (en tant que dossier appelé features/road-rev) et la synchronise également avec votre espace de travail. Il ne vous reste plus qu'à :

cd features/road-rev
p4 add <new files>
p4 edit <existing files>
<etc>
p4 submit

Les modifications que vous apportez dans la branche road-rev sont complètement distinctes de la branche main. Pour extraire les nouvelles modifications de main, il vous suffit de répéter la même commande integ que vous avez utilisée pour la créer, mais d'ajouter un resolve pour gérer les fichiers qui doivent être fusionnés :

p4 integ //depot/main/... //depot/features/road-rev/...
p4 resolve -as
p4 resolve
p4 submit

Si vous exécutez la commande d'intégration dans le sens opposé (c'est-à-dire que vous échangez l'ordre des arguments), les modifications sont fusionnées dans l'autre sens. Une fois que vous avez compris le concept que vous pouvez utiliser integrate pour pousser arbitrairement les modifications d'un ensemble de fichiers à un autre, la création de branches est une question très simple de définition de différents ensembles de fichiers (généralement en tant que dossiers de niveau supérieur) pour représenter différentes branches variantes de code -- c'est ce qu'on appelle le "branchement inter-fichiers".

Si votre administrateur a configuré votre dépôt pour utiliser des flux, le flux de travail est un peu différent (les flux sont des "branches gérées" censées ressembler un peu plus aux branches git auxquelles vous êtes habitué - - vous ne pouvez avoir qu'un seul flux dans votre espace de travail à la fois, et vous utilisez la commande switch pour basculer entre eux, plutôt que de définir une vue client qui mappe des branches/fichiers arbitraires à arbitraires parties de votre espace de travail). Vous avez toujours la même représentation sous-jacente de différentes variantes ramifiées étant des dossiers différents dans le dépôt, mais il y a tout un tas de sucre syntaxique au-dessus qui cache en quelque sorte cette représentation. Pour créer une branche de fonctionnalité à partir d'un flux, vous feriez :

p4 switch -c road-rev

Qui est similaire à git checkout -b road-rev.

4
Samwise 11 oct. 2019 à 15:02