2012-10-10 73 views
15

我可以創建一個倉庫,並使用Gi​​tHub/BitBucket來處理我自己的項目。與其他開發人員合作或嘗試在GitHub上分發項目時遇到問題。適用於多開發人員項目的Xcode + Git的最佳做法

我知道其他答案喜歡Best practices for git repositories on open source projects的,但也有OSX/Xcode的具體問題,我想知道如何解決。

  1. .DS_Store文件可以是一個痛苦。您可以使用.gitignore來防止,但是如果已經包含它們,或者其他開發人員通過笨拙的git命令將它們添加回來,會發生什麼?

  2. .xcodeproj將更改其他人的目錄名稱和開發人員配置文件。什麼是合併或避免衝突的最佳方式?

  3. 如果我已付出或從github上的項目拉,我怎麼能清理這些問題,也可以減少合併爲維護衝突?

如果人們有Xcode中創建了一個例子的.gitignore,或者他們使用自己的初始化腳本回購那麼這將是偉大的!

回答

3

我會試着逐一:

一,你只需要,如果你需要從你的記錄徹底刪除該文件使用git filter-branch。如果這些文件不包含任何信用卡信息,那麼我認爲下面應該足夠:

git rm --cached .DS_Store 
git commit -m "{Your message}" 

然後將此文件添加到.gitignore並提交。

這將提交從倉庫刪除該文件,但會保留在文件中工作目錄。如果你推它,然後別人會提交這個提交,他們可能會刪除他們的文件,所以你必須通知這個。 通過提交.gitignore,您將阻止其他開發人員再次添加此文件。 如果你不是維護者,那麼我認爲你不應該做任何事情,但是要向維護者解決這個問題。

二,我堅信,任何性質的隱藏文件大部分時間都不應該因爲這個原因而被放入存儲庫。因此,我認爲你應該使用.xcodeproj.DS_Store一樣的方法,並將其放入.gitignore並提交它。 .gitignore是上述規則的例外。

三,如果這些文件被正確忽略,那麼將來就不會有任何問題。如果他們已經在回購中,並且有人想要進行這種清理,那麼應該由維護者完成並在團隊內進行溝通。

希望有幫助!

4

git的過濾分支可能會幫助您從資料庫中刪除不需要的文件(文件.DS_Store) - 見例如https://help.github.com/articles/remove-sensitive-data

如果一個笨拙的git的承諾已添加的文件,你應該能夠重播修正的變更到一個乾淨的倉庫。

+0

謝謝Stemann。對其他問題有什麼想法? – Luke

1

你說得對在這個意義上,如果.DS_Store已經加入的.gitignore不會有很大幫助,但是我認爲這仍然是你和其他人一個很好的資源。

當我開始一個項目時,我通常會看這個list看看是否有一個好的.gitignore已經存在。更具體的爲你,this一個是Objective-C .gitignore。

希望這些資源有一定用處。

14
  1. .DS_Store置於.gitignore。然後,如果您還沒有,請將.gitignore添加到回購。 (您不應該忽略.gitignore。)現在所有開發人員都將忽略.DS_Store文件。如果在將.DS_Store置於.gitignore之前錯誤地添加了回購,現在可以刪除它們(在提交中)並且它們應該保持不用。

  2. xcodeproj是一個目錄。該目錄中唯一必須位於存儲庫中的文件是project.pbxproj文件。我一般忽略所有其他的通過將這些線在我的.gitignore

    *.xcuserstate 
    project.xcworkspace/ 
    xcuserdata/ 
    

    ,你應該避免絕對路徑,在構建設置。使用相對路徑。

    您的調試和發佈版本應使用iPhone Developer作爲代碼簽名標識,以便Xcode將自動選擇本地開發人員的配置文件。當你想創建一個IPA(用於分發)時,Xcode將提供用不同的身份重新簽名,在這一點上,你可以選擇你的分發配置文件,如果你需要。

  3. 如果您正在嘗試使用github中發生這些錯誤的項目,可以嘗試讓維護人員修復它們,或者您可以確保不要觸摸.DS_Store文件和代碼簽名身份在相同的提交,你想發送上游。

+2

如果這個答案是正確的,你應該獎勵你的賞金。 – wberry

1

作爲一個Mac用戶,你應該下載喜歡SourceTree一個工具,它支持Git Flow。 Git Flow將幫助您建立一些關於協作者如何將代碼提交到回購的最佳實踐,並且至少使合併衝突更少和更易於管理。對於不同項目類型的一組gitignore文件,你可以去GitHub並下載一個準備就緒的文件。對於Xcode,它們將其列爲Objective-C.gitignore。這是一個很好的起點,它甚至涵蓋了Cocoapods。如果你使用的是外部庫,你的項目應該使用CocoaPods,這樣你就可以隔離這些代碼並將它保存在repo之外,並避免git子模塊。

現在,當你發現一個文件已經進入你的回購如.DS_Store只是刪除它,並繼續前進。確保將其添加到簽入項目的.gitignore文件中。

至於xcodeproj ...在用戶特定的文件中不應該有那麼多的自定義,因爲上面提到的gitignore過濾掉了。如果要共享一個方案,請確保您在管理方案下檢查共享,並且您將簽入該子目錄中的文件。您應該使用自動選擇證書,因此唯一真正的選擇是Developer或Distribution。您還應該利用避免硬編碼完整路徑的variables provided within Xcode。當想到一個例子時,想起了一個例子,在這種情況下,你可能寫了/Users/me/MyProject/Resources/MyProject.plist,但應該使用$(SRCROOT)/resources/MyProject.plist

3

對於與.xcodeproj和合並衝突有關的第二個問題。

使用.gitattributes文件指定爲所有.pbxproj文件應使用merge=union策略,這應該意味着混帳知道從衝突雙方的變化進行合併,採取先上游的變化來處理合並衝突。

This article explains it in a bit more depth

相關問題