2013-05-03 39 views
1

比方說,我從源代碼構建Android或CyanogenMod,並希望對其來源進行更改。另外,我們假設我不想提交這些更改(例如,因爲它們不完整或者已經被拒絕的更改)。如何正確管理對Android源代碼的更改?

什麼是最好的管理方式?我如何對我的「個人」更改進行適當的源代碼管理,但同時能夠使用回購同步,以便我擁有最新的更改?

我可以擁有本地分支機構(針對每個項目進行更改),並且在每次回購同步後,從主分支機構合併到本地分支機構?

回答

0

當您運行「回購同步」時,實際發生的情況是每個git存儲庫都在新上游重新分配。如果您在特定的git存儲庫中沒有任何本地修補程序,則這是一個簡單的快速轉發。如果你確實有一些補丁,並且上游也是這樣做的(你的分支和上游分支已經分化了),回購將嘗試自動重新分配。

因此可以說,你在上游代碼上面有一個補丁,並且自你應用該補丁以來,上游已經有了一些新的命令。當您運行回購同步時,回購將嘗試在上游頂部重置您的代碼。如果自動rebase失敗,repo會拋出一條錯誤消息,讓您知道您應該手動修復該修補程序。

總結一下:你可以在你想修改的每個項目中創建一個分支,在你的分支上存儲你的提交。 Repo sync會自動重新分配你的補丁(除非失敗,然後你必須手動應用)。

+0

我已經剛剛嘗試過(創建一個分支並對該分支進行提交)。運行回購同步後,分支被保留,但它不會自動合併或重新綁定我的本地分支上游。相反,它只是切換到上游。 – amfcosta 2013-05-05 00:19:00

0

您將需要使用repo start命令來創建跟蹤遠程repo分支的主題分支。或者你需要使用git branch命令的--track選項手動創建一個帶有遠程跟蹤分支的本地分支。使用git分支命令的--set-upstream選項將追蹤分支添加到現有的本地分支。

正確設置了跟蹤分支後,repo sync命令將快進並重新應用您的本地修補程序,正如Anton Cherkashyn在他的回答中所述。

0

將gerrit與repo和git結合使用。

0

這似乎適用於我。

一提的一些設置

# cd to root of source tree 
repo start MyBranch  # Create working branch for all projects 
repo checkout MyBranch # switches all projects to use MyBranch 

時間的推移,提出並承諾(在MyBranch)神話般的編輯,工作分支是乾淨的。現在想來上游的變化......

# Current active branch is "MyBranch" 
# The following sync -d as per repo docs: 
#  -d: switch specified projects back to the manifest revision. 
#  Helpful if the project is currently on a topic branch, 
#  but the manifest revision is temporarily needed. 
# In other words, it automatically syncs default manifest's upstream 
repo sync -d -j12 

# Active branch may be "MyBranch" or possibly a detached head or whatever. 
# So, if necessary, switch back to MyBranch 
# - I usually do this just to make sure all projects are in MyBranch 
# - NOTE: If a new project appears it won't have MyBranch 
repo checkout MyBranch 

# Now we're in MyBranch. Its "upstream" is our local master so sync it. 
# - This is usually rather quick 
repo sync 

的「回購同步-d」未必是必要的,但還沒有就我所看到造成任何問題。此外,它還會在本地拉取主代碼行以保持同步,以實現便捷的差異等。

也許MyBranch內部的「回購同步」也是如此。但是當我省略「repo sync -d」步驟並且在MyBranch簽出時只做「回購同步」時,我似乎沒有得到任何更新。(雖然也許我的本地設置以某種方式搞砸)

總結:

選項A:可能工作

cd RootOfRepoSourceTree # wherever you have it 
repo checkout MyBranch 
repo sync 

選項B:一直對我的作品

cd RootOfRepoSourceTree # wherever you have it 
repo sync -d -j12 
repo checkout MyBranch 
repo sync 
相關問題