2011-12-06 24 views
5

我有一個config/my_private_data.yml文件的Rails應用程序。我想推動整個應用程序都到我的測試服務器和github。Git:只推送私人配置文件來測試版本庫而不是github?

但是,當我推送到測試服務器時,我想包含私有文件。當我推送到github時,我不想包含私人文件。最簡單的方法是什麼?

+2

私密性如何?如果文件變爲公共文件時它是一個大規模的災難,那麼不要包含它(使用具有默認值的'config/private_data.yml.template')。你有機會,或者有人犯了錯誤,你有github上的數據或其他你現在從未想過的地方。 – Unapiedra

+0

不是特別私密,但不是我想分享的東西。我不會將我的核碼發佈到github上,甚至不會將它們放到我的應用程序中。 – Clay

+0

這裏應該是一個解決方案:http://stackoverflow.com/questions/1836742/using-git-how-do-i-ignore-a-file-in-one-branch-but-have-it-committed-在另一 –

回答

1

您可以設置兩個分支。 mastersecret。然後,您可以在secret分支中添加並提交config/my_private_data.yml,然後您可以將其推入測試服務器的主分支。

touch config/my_private_data.yml 
git checkout -b secret 
git add config/my_private_data.yml 
git commit -m 'Commited secret file' 
git push testserver_repo_url secret 
git checkout master 
git push repo_on_github master 

然後如果您在主服務器上有新提交,請執行git checkout secret; git rebase master
不要犯secret,如果你這樣做,做一個櫻桃選擇提交。


當然,並不是所有的方法都很好。從我現在的想法來看,你可能無意中將祕密分支推向github。另外,如果您需要my_private_data.yml文件(儘管您可以從祕密分支簽出該文件),那麼您無法在master中工作。

+0

有沒有更好的方法來解決這個問題?我的用例是我想推送到github進行備份,但是推送到我的測試服務器進行測試,並且沒有私有文件,應用程序將不會加載。 – Clay

+0

我想接下來的問題是相反是否可能 - 比如說,我在包含祕密文件的master上工作,然後將沒有祕密文件的master分支推送給github。是否有快速的方法和/或腳本總是分支主,刪除祕密文件的所有實例,然後將分支推到github上? – Clay

+0

@Clay理論上你可以使用鉤子(google git鉤子),但是沒辦法從git中刪除祕密文件的所有實例(因爲你不能改變git的歷史記錄)。 – Unapiedra