2017-05-10 96 views
0

我有一個文件,實際上是一個配置文件,在我的origin/master和我的origin/feature/xy branch,我刪除。我在本地刪除了該文件,並將刪除的更改提交到遠程。當我查看bitbucket時,該文件在origin/master中消失。git忽略同步問題

現在,我希望該文件存在再次因此我試圖重新創建文件,並在我添加的文件名,同時hoever將其推到origin/master到的.gitignore

這一切的想法要在origin/master中有配置文件,這樣構建服務器可以使用裏面的設置,但也可以防止origin/feature/xy分支覆蓋origin/master上的文件。該文件應在origin/master上出現,並在創建的每個新分支中被忽略。這些分支可能有自己的設置裏面的文件,但他們可能永遠不會推動他們的本地變化origin/master

如何實現這一目標?該文件現在不見了..

+0

Git要麼跟蹤文件要麼沒有。如果您在另一個分支中修改一個跟蹤文件並提交,然後將此分支合併到master中,master將獲取這些更改(或合併衝突,具體取決於方案)。另一方面,如果您從主文件中刪除該文件,然後創建該新的分支,該分支將不具有該文件。如果您現在將文件添加回主文件,您可以將其保留在主文件中,而無需額外的分支對其進行修改或刪除。但是,如果您現在將主控合併到您的其他分支,則文件返回。 –

+0

在什麼情況下,我會在我的問題中得到所需的行爲? – Ckkn

回答

0

「忽略規則」(例如.gitignore)功能不會做你想做的;他們只做一件事:告訴git,如果未跟蹤的文件匹配模式,git應該假裝它不在那裏。

它不會阻止合併路徑,或防止分支在路徑中看到文件,或類似的東西。如果文件在回購站中,即使其路徑與忽略規則相匹配,忽略規則也不會對該文件執行任何操作。

但如何做到你想要的?

那麼,最完整的解決方案將是在源代碼管理之外爲您的配置文件找到一個主目錄。您可以將文件保留在構建服務器上(如果構建服務器未備份,可能還需要第二個位置),然後將其從包括主服務器在內的所有分支中移除,然後將其添加到.gitignore中,以免沒有人意外地提交流浪副本。

唯一不利的一點就是,如果配置文件必須發展以使得特定版本的源代碼需要某個特定版本的配置文件,那麼您將失去跟蹤該關係並必須使用一些其他機制來跟蹤這一點。但是,如果這個文件改變的主要方式是源代碼的演化,那麼將它關閉在功能分支上可能並不是最好的東西。

另一個(部分)解決方案是使用git掛鉤來拒絕任何合併到master來更改文件。再次,這隻能防止意外事件發生(因爲您可能還需要一種方法隨時間對主文件進行修改)。它不會阻止在分支上看到該文件。