2012-06-05 78 views
2

我似乎無法找到任何幫助我的情況&希望有人可以幫助我,因爲我不完全熟悉git,但是很愛它。Git - 合併非Git文件夾與git下的類似文件夾

我們有一個在git控制下顯示我們開發分支的開發服務器。然後,除了具有穩定版本的網站的開發分支之外,我們還有一個主分支。

然後,在我們的生產服務器上,我們有穩定的站點,但由於事情發生了,它不受git版本控制,我們只是手動更新了我們需要的文件。顯然,穩定的主分支文件看起來有點類似於手動管理的生產文件集。

我們希望最終在git控制下獲得生產服務器,顯示master分支,就像dev服務器反映dev分支一樣。

但是,我不知道如何去設置生產服務器上的git repo,並以某種方式將它與主分支合併。任何人都可以提供一些指針,提示或方向?

我在網上發現的唯一一件事情是沿着設置另外兩個回購的路線(總共3個回合),其中一個是另外兩個回收站的父母,並以某種方式將它們整合在一起。我希望有一個不同的解決方案(或者至少一個「雅,這是正確的」,所以我不會去一個愚蠢的兔子洞(不知道這個Merging two folders using git可能是某種開始??但缺乏迴應它很難看到,如果這是追求)

感謝所有正確的事情。

回答

1

如果我給你正確的生產服務器上的網站是基於master分支(或在您的git回購一些其他承諾),但不完全相同,即有一些手動更改,你不想失去這種手動更改。以下是我在這種情況下做的事情:

  1. 檢出或克隆您的主分支(或提交您的生產服務器數據所基於的地方)。
  2. 你現在有一個乾淨的工作副本與生產服務器「基地」。
  3. 將生產服務器上的所有數據複製到這個乾淨的工作副本。
  4. 使用git diff檢查所有更改並提交相關的更改。
  5. 如果您在步驟1中籤出的基地不是您的主人,您現在可以簡單地將使用git merge master的手動更改與您的主人合併。

我希望我能正確理解你,並且這會引導你朝着正確的方向前進。

+0

謝謝siegi!乍一看,我以爲你有點失落,但實際上我認爲這只是它!不幸的是,生產文件將成爲一個巨大的文件大雜燴,這些文件並不完全來自任何特定的提交,並且大部分是手動的(但我相信它們與我的歷史中的東西類似。所以我想我會做像這樣的事情,並且交叉我的手指,git diff不是太可笑! 感謝您的及時響應;-)我會回發它如何去。隊友的歡呼聲! – jstats

0

您不必版本化生產服務器:它應該已經被版本化!

你需要做的是有一個回購什麼,將要到處部署:生產服務器,臨時服務器,本地開發機等

,但是你想你會在本地工作,但在在生產服務器上,您只需保留主分支
在本地,當你完成某件事情時,它已經完全工作,測試等。只需將其重新組合(或合併)成即可(git push origin master)。然後,在您的生產服務器git fetch && git rebase origin/master(或拉)以獲取更改。

+0

感謝您澄清任何疑問,這些有時是救命!我們其實只有一個回購單,我想我只是使用了錯誤的術語。 : - /你描述的幾乎是我們的配置,我只需要將生產服務器上手動更新的文件轉換爲git控制下並將其設置爲主分支;-)謝謝Samy – jstats

+0

什麼樣的修改文件?如果你的意思是上傳的文件,你不應該版本。如果是配置文件,則可以使用環境變量來設置配置信息;或版本*模板*配置文件(僅後綴-dist),並忽略原始配置文件,然後從生產服務器中的版本化配置文件創建配置文件。我建議你看看關於部署良好實踐的12factor.net。 –

0

您無法可靠推送到具有工作目錄的存儲庫。你會得到關於非裸倉庫的錯誤,並且與系統作戰會對你的潰瘍有害。

什麼你應該做的是:

  1. 的rsync/SCP您的生產文件到本地系統,並與相應的分支(如主機)合併。
  2. 將您的主分支推送到您的生產主機可見的存儲庫。
  3. 從生產機器運行git clone
  4. 由於您不再對生產主機進行更改,因此您甚至可以將git pull設置爲cron作業。

只要你不把在你的Git生產的機器上工作樹手動更改,你會不會當你要推出的最新變化必須做其他任何事情比git pull。只要記住:從您的生產系統拉,不要推它。

+0

羅傑,謝謝。我們在開發服務器上使用更新後的掛鉤進行這種設置。煩人的事情將是當服務器想修改文件(如wordpress更新或其他)時,但我相信有另一個鉤子來處理這個有點順利,我讀了關於[這個網絡爲重點的git工作流blogpost](http:// joemaller .COM/990/A-網絡爲重點,git的工作流程/) – jstats