2017-08-17 4 views
0

Ich bin sehr neu zu Git, so dass jede übermäßig detaillierte Erklärung ist klar:)Git Kirsche eine Funktion bestand aus diskreten Pick verpflichtet

Sprich, ich habe ein Spiel-Anwendung, die in beiden Ländern freigegeben. Tatsächlich habe ich zwei Code-Repositories für diese Anwendung, die die gleiche Architektur haben, sich aber mehr oder weniger auf der Implementierungsebene unterscheiden. Jetzt manchmal würden wir die beiden Repositories AKZ möchten, wie Sie den Code eines Merkmals zu einem anderen Repository zu bewegen, und ich habe zwei Fragen:

  1. Was ist die beste Praxis alle Commits eines Merkmals für die Gruppierung (wir verwalten Aufgaben auf Atlassian Jira und sagen wir, dass wir alle Aufgaben eines Features dort immer korrekt beschriften können)? Ich denke, Commits zu beschriften und sie nach Jira Issue ID zu filtern, aber wie genau?
  2. Sobald ich die Liste aller Commits, die ich brauche, wie verwende ich sie auf das andere Repository, wenn es viele von ihnen sind, und sie sind diskrete Commits.

Vielen Dank!

Antwort

0

Die beste Vorgehensweise zum Gruppieren von Commits eines Features besteht einfach darin, einen Feature-Zweig zu verwenden: Alle Commits eines Features befinden sich einfach im selben Zweig. Wenn Sie es ohne Schnellvorlauf zusammenführen, können Sie sie im Commit-Verlauf identifizieren und auch das endgültige Delta im Zusammenführungs-Commit erhalten.
Auf diese Weise Sie eine Geschichte wie diese:

3  next commit 
2  merge of feature #1 
|\ 
| C last commit of feature #1 
| B 2nd commit of feature #1 
| A 1st commit of feature #1 
|/ 
1  commit before starting feature branch 

Sie können die von der Funktion # commit identifizieren 1 mit:

# Get all the commits in second parent of merge that are not in first parent of merge 
git log 2^2...2^1 
# To get only the commit hash (to use as parameter for cherry-pick): 
git rev-list 2^2...2^1 

Eine andere Art und Weise ist es, sie mit einer eindeutigen Kennung in die markieren Commit-Nachricht (zB ein Ticket Referenz), dann können Sie diese Liste durch die Filter von git log mit:

git log --grep 'feature #1' 
# To get only commit hash: 
git log --format='%H' --grep 'feature #1' 

anwenden zu können Commits aus ein Repository in ein anderes, haben Sie zumindest diese zwei Lösungen:

  1. Fügen Sie den ersten Verwahrungsort als Remote in die zweite, dann können Sie einfach cherry-pick die Commits (Sie mögliche Konflikte beheben können müssen) :

    # In second repository 
    git remote add other_country ULR_TO_FIRST_REPO 
    git fetch other_country 
    # Go on the right branch 
    git cherry-pick COMMIT1 COMMIT2 COMMIT3... 
    # If you have conflict: solve them (like for a merge) and then `git cherry-pick --continue` 
    
  2. im ersten Repository, die Commits mit git format-patch exportieren mit git am

0 (mehrmals, wenn sie nicht im gleichen Bereich sind) und sie im zweiten Repository anwenden
+0

Danke für Ihre schnelle Antwort! –

+0

Danke für Ihre schnelle Antwort! Ich verstehe den Teil über die Verwendung von Non-Fast-Forward, aber wie genau identifiziere ich sie im Commit-Verlauf? Ich weiß, dass ich mit jedem Commit einen Kommentar hinzufügen darf (git commit -m "Feature-ID-2231"). Ist es das, worauf du dich beziehst? Es tut mir leid, dass ich den Unterschied zwischen den beiden Möglichkeiten nicht verstehe. Okay, danke! Ich schaue mir ein git-GUI an und schaue, ob es einen schnellen Weg gibt, alle diskreten Commits für das Cherry Picking aufzulisten:) –

+0

Ich habe meine Antwort aktualisiert – zigarn

Verwandte Themen