簡體   English   中英

如何從git merge中排除特定的提交(永遠)

[英]How to exclude a particular commit from git merge (forever)

我正在開發一些Web應用程序(php,codeigniter)。 今天是時候把它推向github了,但我遇到了一個我無法管理的問題。

我有兩個分支:

  • master - 此分支應該用於github推送,不包含憑據或任何其他敏感數據(只是公共代碼)
  • dev - 這是master的孩子,用於開發,確實包含憑據(我的私人app instantion)

憑證我的意思是:數據庫登錄,密碼,主機,用戶; oauth服務id / secrets; encryption_key。 憑據存儲在/ application / config文件夾中的2個單獨文件中。

我的想法是,我將在dev上進行所有更改,而不是將dev合並到master中,並將master內容拉到github(但master不能包含我的私有憑據)。

這就是我到目前為止所做的事情:

  1. 從/application/config/config.php和/applications/config/database.php中刪除了所有憑據(因為我不希望它們在github上公開)它們變成了一個空字符串,如:$ db ['default' ] ['hostname'] ='';
  2. 啟動git存儲庫並進行初始提交 - 創建的默認分支名為“master”
  3. 拉大師到github

到現在為止它非常酷 - 我的github上的項目代碼沒有憑據。 接下來我需要對我的項目進行一些更改,所以我:

  1. 創建了新的分支'dev'
  2. 將我的憑據存儲到dev中,然后進行提交 - 我需要dev instantion才能擁有憑據,因為每次我在代碼中更改某些內容時都會將其上傳到ftp服務器(我在本項目中不使用本地LAMP或類似的東西) )

所以現在我需要在dev中進行一些更改,上傳它並拉到github所以我:

  1. 對dev進行更改(假設添加新功能)
  2. 結帳以掌握
  3. 將dev合並為master。

我期望發生的事情: Git會問我在'master'中應該使用哪個版本的配置,因為它在兩個分支中都是不同的。 我將使用diff來選擇文件的“主”版本(不包含憑證)。 Git會記住我的選擇,將來我不會再選擇當我將dev合並到master中時。 Git在我的其他項目中就是這樣的,其中dev是一個主分支,而instantions是它的子代(在這種情況下,dev是一個孩子,我將child合並為parent)。

發生了什么: Git只是將憑證從dev復制到master,沒有問我這個問題。 所以現在我的主分支被憑證“污染”,我不能再把它推到github了。

我的問題是:

  1. 為什么會這樣,我怎么能避免這種情況?
  2. 有沒有其他(更好?)方式來處理這類問題。

如果有任何不清楚的地方,請告訴我,任何幫助將不勝感激。

如果主分支中的文件在原始分支后更改為dev,則Git將僅標記沖突,然后在dev中更改相同的文件。

我建議你為你的憑證添加一個.gitignore條目,或者使用ENVIRONMENT變量將它們分開,在codeigniter中這很容易,你所要做的只是你的apache配置(vhost,如果你使用它們)是添加SetEnv APPLICATION_ENV development然后你可以在application/configs添加一個名為development的文件夾,現在當你在開發環境中運行時,這些配置將優先於基本配置目錄中的配置。

這不是關於gitignoring文件,刪除提交,而是良好的文件結構和環境設置,以區分不同的環境,使用developmentstagingproduction (這是默認設置)

否則添加.gitignore行告訴git忽略那些特定文件。

Git ingore會有所幫助。 閱讀此博客文章了解解決方案。

http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/

您可以包含配置文件中的憑據,並將該文件添加到.gitignore

配置文件可以包含開發,預生產和生產環境的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM