2013-08-22 23 views
-1

我想開源一些我在GitHub上完成的web項目,但是有一些文件包含數據庫密碼以及我不想明顯包含的內容。GitHub/BitBucket開源項目的最佳路徑,但不共享敏感文件?

我可以git rm這些文件,或將它們添加到我的.gitignore,但這將它們從git和版本控制一起刪除,我不想這樣做。

我怎樣才能使它所以當我把我變成一個回購,只有某些文件被列入?

+0

請注意,如果您之前添加了這些文件,你需要使用[過濾分支(https://www.kernel.org/pub/software/scm/git/docs/git-filter-branch。 html)將它們從以前的版本中刪除;否則人們仍然可以通過回顧歷史來閱讀它們。 – remram

回答

3

我通常建議人們在這種情況下,使用「模板」模式的git的子模塊。

例如,你有一些application.settings文件,它包含的東西像數據庫密碼,端口綁定。將該文件複製到application.settings.template,並去除所有特定於站點的信息,例如密碼和端點,只留下您想要作爲默認設置的設置。

然後,添加application.settings.gitignore。任何時候當你引入一個新的設置時,你都必須調整這兩個文件,但是這可以讓其他人通過查找*.template文件很容易地看到要配置的內容。他們只需要複製這些文件並刪除.template擴展名,然後根據需要對其進行自定義。

這有一定的優勢:

  1. 部署的設置將不會,如果有人愚蠢到在生產git reset --hard,重挫作爲實際的設置文件不被Git的跟蹤。
  2. 的顯影劑不會從檢查出由於局部配置更改的不同分支防止(通常一個將必須git stash && git checkout other-branch && git stash pop如果目標分支有不同的設置文件比當前分支,並且開發者使本地更改設置文件)。
  3. 由於實際的設置文件將被忽略,這是非常困難的偶然意外地推到遠程存儲庫。

的缺點是,在模板中新/修改的設置不能合併到一個部署的設置文件(但如果你是在生產中,你可能要檢查的模板文件中的差異和應用那些反正手)。在拉出或檢出新分支後,必須手動git diff HEAD [email protected]{1} -- application.settings.template才能查看設置模板中更改的內容。

0

您可以使用由私人託管,幷包含在你的主要的git回購

+0

如果(1)專用URL不包含敏感信息,並且(2)這是存儲庫中唯一的子模塊,則這將起作用。 (當一個失敗時,Git將停止提取子模塊,所以這可能會阻止其他子模塊被正確提取。) – cdhowie