2016-07-27 47 views
0

我使用Git作爲獨奏開發者。我最近開始將我的項目推向私人回購的在線。當我創建一個新服務器時,我克隆了repo並運行我創建的任何安裝腳本以啓動並運行。修改文件後Git拉動。如何避免衝突?

安裝腳本通常會更改某些目錄。例如,cache目錄需要具有允許寫入文件的權限。有時我也會修改一個配置文件(儘管我已經開始將配置文件放在環境變量中),或者引入一些不屬於項目一部分的內容映像。

當我對這些文件進行更改時,我不能再使用git pull來提取已更改的文件。如果我因衝突而做了git pull,Git會抱怨。

我試圖找到一種方法,將允許我從本地推送到遠程,並從遠程git(私人github)拉到我的服務器。

可能嗎?

+0

嗯,我建議將這些更改保留在回購之外,但如果您真的無法做到這一點,如果您的本地更改沒有任何實際衝突,則存儲> pull> pop通常會起作用。 – jonrsharpe

回答

0
git stash 

Git存儲將您的更改置於存儲狀態。然後,你做:

git pull 

其中拉新的變化,那麼:

git stash apply 

會帶着您更改回。無論如何,你需要一個mergetool。我個人使用並推薦了PHPStorm MergeTool,我發現它非常易於使用,並且擁有出色的用戶界面。

4

git stash,那麼你所有的本地變化將被擱置,然後你就可以做git pull。 現在您已經獲取了您計算機上的所有遠程更改。 然後執行git stash apply重新應用您的配置更改。

1

在本地存儲庫中進行永久性未索引/未提交的配置更改並不是一個很好的解決方法(正如您所發現的那樣)。

若要從根本上解決這個問題:

  • 有每一個環境配置文件。這可以(並且,除非它包含密碼或其他祕密,應該)存儲在存儲庫中(在這種情況下,將它們打包在具有單獨名稱的/config目錄中),或者可以留在外面(然後你將只有一些存儲庫中的某種默認配置文件實際上並未「執行」)。
  • 運行腳本時,將它們指向正確的配置文件。例如,您可以通過使用配置文件名建立環境變量,或者通過在公共位置(如/etc/opt/...)或存儲庫內的符號鏈接(如config/localhost的忽略符號鏈接)來完成此操作。無論你做什麼,你的代碼都會知道選擇哪個實際文件。

然後,您可以隨時提交所有更改,並且來自不同環境的配置文件不會被視爲一個(由於不同的文件名)。沒有衝突等

0

從來沒有git pull而是git fetch然後決定是否要合併或rebase在遠程之上。通過這種方式,您始終將您的更改提交到本地回購以保證其安全。

爲你描述的工作方式我會去每個服務器的本地分支。 我會推動遠程只有你需要的變化。

所以在服務器上,你會擁有分支機構proj-localproj-remote-localproject-remote(也保持配置文件使用密碼進行遠程倉庫,以保證他們的安全當前服務器上)。你在你的服務器上工作proj-local,如果你有變化,你想發佈到所有服務器櫻桃挑選他們並應用proj-remote-local然後你推到project-remote頂部。

另一件事是看看git ignore你想保留在本地的東西,這將使git不關心這些事情的變化,你只會在你關心的事情上工作。