Tirez pour une autre branche Git sans changer

32

nous sommes récemment passés de SVN à Git et, simultanément, avons mis nos systèmes en direct sous contrôle de version (au lieu de la sortie locale et de la copie de fichier en direct).

Sur le projet auquel je suis affecté, nous accédons tous au même référentiel et, pour que les modifications soient prises en charge, git pull Là. Cela pose des problèmes car nos concepteurs Web insèrent dans le VCS des modifications qui ne devraient pas encore être actives, mais devraient se trouver dans l'environnement de test Web.

Lorsque l'un des développeurs entre en direct, il reçoit tous les changements (éventuellement inachevés).

J'ai pensé changer en direct pour une branche supplémentaire et fusionner ce qui a changé, mais en raison de mon manque de connaissances géniales, je ne sais pas du tout comment.

Mon idée est:

  • Créer une nouvelle branche en direct ( git branch live ).
  • Chaque fois que quelque chose doit aller vivre
    • Tirer les changements dans le maître (comme: git checkout master; git pull; git checkout live )
    • git merge master

Le problème est que passer à master ou tirer tout directement dans le système live poserait des problèmes, je préférerais donc éviter cela.

Existe-t-il un moyen de le faire ou existe-t-il un meilleur moyen de gérer le système Live (à l'exception de la formation des webbies pour qu'ils ne poussent pas les choses non finies).

Morfildur
la source
git pull --all sera par défaut ne pas tirer master en live, il tirera master et le fusionnera avec master, et (s'il existe sur le serveur) tire live pour fusionner en live. Est-ce que tu l'as essayé?
Tobias Kienzler
Votre problème est-il dû à un fichier qui n'était pas sous contrôle de version avant la création de git-live et de git-ajouté après modification à master ultérieurement? C’est ce qui m’était arrivé auparavant. Généralement, il suffirait de renommer temporairement ce fichier, ou vivre , utilisation git checkout -f ignorer le problème - mais faites une sauvegarde!
Tobias Kienzler
1
en relation: stackoverflow.com/questions/3216360/…
Ciro Santilli 新疆改造中心 六四事件 法轮功

Réponses:

16

Vous pouvez utiliser git stash avant de vérifier master et pulling, et après avoir vérifié live again, utilisez git stash pop (ou si votre git est plus vieux, git stash apply et git stash clear en supposant que vous n'avez rien caché d'autre)

Tobias Kienzler
la source
5
git pull --all va chercher toutes les télécommandes, mais il va quand même essayer de fusionner une branche (ou la branche par défaut) dans la branche actuelle.
mipadi
@ mipadi oui, mais seulement la branche actuelle sur elle-même sans essayer de passer à la caisse et causer le conflit, non?
Tobias Kienzler
Il fusionnera toute branche configurée pour être automatiquement fusionnée dans la branche actuelle (si une telle branche est configurée).
mipadi
1
@Superole Il est documenté comme "chercher toutes les télécommandes", ce qui inclut non seulement plusieurs référentiels, mais aussi des branches. Bien qu'avec le recul, git fetch --all aurait pu être une meilleure réponse
Tobias Kienzler
1
@TobiasKienzler Il demande uniquement à git de récupérer toutes les télécommandes configurées. Le cas le plus courant est de n'avoir qu'une seule origine nommée distante. SI vous avez plusieurs télécommandes avec la même branche que votre actuelle et qu'elles ne sont pas dans une relation d'avance rapide l'une avec l'autre, ALORS en utilisant le --all L'option vous donnera une fusion de pieuvre des différentes versions de la branche dans le courant! Donc, mon conseil est de rester loin de --all à moins que ce ne soit ce que vous recherchez, car dans la plupart des autres cas, cela ne vous donnera rien.
Superole
8

J'ai pu tirer des changements de origin/master dans master en travaillant dans une autre branche en utilisant cette commande:

git fetch origin master:master
Jeff Bridgman
la source
1
Impressionnant! Exactement ce que je cherchais - cela doit être documenté beaucoup plus clairement ...
Markus Shepherd
4

Résoudre le problème en premier. Ils ne devraient pas pousser vers une branche dans laquelle ils n'ont aucune activité.

Ce que vous semblez demander serait quelque chose comme

git checkout live
git pull origin master

Cela tentera une fusion du maître distant et de votre branche active.

Josh K
la source
Le problème est que nous n'avons actuellement qu'une seule branche et qu'il ne sera pas vraiment possible de changer cela car tout le monde est trop habitué au SVN et ne veut pas apprendre les avantages de quelque chose de nouveau. Il sera uniquement possible de créer une nouvelle branche dans le répertoire actif. La fusion du maître distant avec la branche active est ce que je veux éviter, car je ne peux empêcher personne d'insérer du code de débogage, des fonctions incomplètes, des erreurs de syntaxe et toute autre chose pour le maître (je ne suis qu'un développeur junior). Merci pour votre suggestion.
Morfildur
2
@dbeme: Vous pouvez utiliser des archives et des correctifs. ;) Sauf s'ils sont disposés à apprendre git (et que ce n'est pas difficile du tout de créer des branches et de fusionner), vous allez avoir des problèmes.
Josh K
0

Je vous recommande de créer un référentiel de test pour que tout le monde puisse s’engager. Tous les dépôts, y compris votre site Web en direct, seront des clones du dépôt de test. De cette manière, n'importe qui peut pousser à tester sans toucher au site Web actif. Lorsque quelqu'un a besoin de mettre à jour le site actif, vous pouvez extraire ce dernier du référentiel git testing. Ce flux de travail est assez similaire à SVN. Pour plus de flexibilité, je vous recommande d’utiliser la branche "live" que vous décrivez.

Pour résumer, le repo git de tout le monde est un clone du repo de test. Le site de production en direct n’est qu’un clone du rapport de test. Alternativement, le test pourrait être un clone de production en direct, de sorte qu'une "impulsion folle" se dirige toujours vers la production.

D'autres options incluent l'ajout de la branche "active" à cet arrangement ou l'inclusion d'un dépôt "intermédiaire" entre les tests et la production. Pour plus de sécurité, je vous recommande de limiter l’accès au dépôt git en direct et d’obliger les utilisateurs à utiliser un script sécurisé qui facilite la production en direct.

edgester
la source