2017-08-17 77 views
0

我很新的Git的,所以任何過於詳細的說明表示讚賞:)Git的櫻桃挑選一個功能包括離散的承諾

說,我是在兩個國家發佈的遊戲應用。實際上,我爲這個應用程序提供了兩個代碼倉庫,它們具有相同的體系結構,但在實現級別上或多或少有所不同。現在,我們有時會希望兩個倉庫來交換代碼,如功能的代碼轉移到另一個倉庫,和我有兩個問題:

  1. 什麼是分組功能的所有提交的最佳實踐(我們在Atlassian Jira上管理任務,讓我們假設我們總是可以正確標記某個功能的所有任務)?我正在考慮標記提交併通過Jira問題ID對它們進行過濾,但具體到底如何?
  2. 一旦我得到了我需要的所有提交列表,我如何將它們應用到其他存儲庫,如果它們中有很多並且它們是離散提交。

謝謝!

回答

0

組合提交功能的最佳做法是使用功能分支:功能的所有提交都只在同一分支中。如果在沒有快速轉發的情況下合併它,則可以在提交歷史記錄中識別它們,並在合併提交中獲取最終的增量。
這樣,你會得到一個歷史是這樣的:

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 

您可以識別的功能#1與承諾:

# 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 

的另一種方法是將它們與一個唯一的標識符標記提交的信息(如票參考),那麼你可以通過使用git log過濾器一一列舉:

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

從提交申請一個倉庫到另一個,你有,至少,那些2個解決方案:

  1. 添加第一個倉庫作爲遠程在第二個,那麼你可以簡單地cherry-pick的提交(您可能必須解決潛在的衝突) :

    # 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. 在第一個資料庫,與git format-patch導出提交(多次,如果他們不是在同一個範圍內),並在第二個存儲庫git am

0應用它們
+0

感謝您的快速回復! –

+0

感謝您的快速回復! 我瞭解使用非快進的部分,但我如何在提交歷史記錄中識別它們?我知道我可以在每次提交時添加註釋(git commit -m「Feature-ID-2231」)。這是你指的是什麼?對不起,我不明白兩種方式的區別。 好的,謝謝!我會看看一些git GUI,看看是否有快速的方式來列出櫻桃採摘的所有離散提交:) –

+0

我更新了我的答案 – zigarn