2011-10-03 51 views
3

我想在公共分支中排除一個名爲config/dbconfig.js的文件,我使用它將它推送到github,但仍然能夠從主機推送到我的noester.com git repo以推送到生產。我改變了配置文件,以這樣的:Git Config排除僅用於分支的文件

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    excludesfile = +info/exclude 
[remote "nodester"] 
    url = *** My Git Repo *** 
    fetch = +refs/heads/*:refs/remotes/nodester/* 
[branch "public"] 
    excludesfile = +info/exclude_public 

我確信刪除的.gitignore文件,我現在用的是git的/信息/排除的一般排除文件,並希望能使用的.git/info/exclude_public排除該文件,所以當我合併到公共文件不合並以及不推送到github。

如果我這樣做,它仍然會將文件添加到git甚至在公共分支。所以我在想我以前的語法錯了,或者這是不可能的。

$ git checkout public 
$ git add . 
$ git status 
# On branch public 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: config/dbconfig.json 
# 

如果無法做到這一點是有沒有更好的辦法對付你不想出去一個開放的Github上項目,而不運行兩個Git倉庫,而它們之間手動合併數據庫CONFIGS?

回答

2

對於配置文件,最好處理內容過濾器驅動程序,而不是試圖忽略某些分支的文件。

content filters

您可以:

  • 店一個配置文件模板
  • 店公共價值
  • 讓內容過濾器「smudge」腳本構建目標配置文件出了模板和公共值,
    ...除非該腳本檢測到它在部署環境中,在這種情況下,它將使用來自其他源的值該服務器上(存儲在回購而不是公共價值)

見插圖:

+0

好吧,我想我得到了它所以像.gitattributes這樣的東西? config/dbconfig.json merge = ours – JTWebMan

+0

@JTWebMan:合併驅動程序也可以工作,但是我的過濾驅動程序的目的是使用來自回購之外的值。 – VonC

+0

那麼在我的機器上?我想我得到了你所說的話,所以當我提交更改時,它會查看哪個分支並替換了本地文件中不存在的文件中的值。它是否也適用於合併? – JTWebMan