2012-12-20 108 views
3

我在開發新站點時一直使用Git/Beanstalk,並且它已將奇怪的工作從本地服務器推送到登臺服務器。我現在處於想要用生產服務器「活」的地步,並且想知道正常程序是什麼(其他許多鏈接都不包括這個......)。管理Git登臺服務器和Live服務器

我希望從新的生產服務器重新開始「新鮮」,而不是推動我在過去的6個月中從臨時服務器進行的數千次更改。有沒有辦法做到這一點?我是否簡單地創建一個新的回購,擺脫舊的回購等?我怎樣才能清除歷史記錄,以便它只需要暫存服務器上的內容,並推送它(或從本地服務器推送)。我使用塔,所以我知道Git幾乎不會陷入麻煩(命令行不是我的東西)。你能把所有東西都包起來,並說「這是1.0版本,讓我們從這裏開始」這種事情?

此外,當忽略緩存文件和圖像等時,我有些懶惰。我可以在事後輕鬆添加這些.gitignore文件嗎?

+0

這個問題不是真的與ExpressionEngine相關,並且最好位於stackoverflow或git特定的stackexchange站點中。 – CreateSean

+0

我曾考慮過這個問題,但後來覺得它與EE在我的回購和正常程序中的映像文件/緩存文件有關。下面的答案非常有幫助,也許別人會發現價值?如果沒有,請隨時移動(讓我知道它去了哪裏!) –

回答

2

除非你的git存儲庫真的很大(因爲你偶然添加了一堆媒體文件或其他東西),這樣做幾乎沒有意義。版本控制的全部重點是保留更改的歷史記錄,以便您可以回顧並瞭解何時添加了某些內容。之所以沒有教程介紹這一點,是因爲你通常不會使用git。

我可以看到你想要做到這一點的唯一原因是,如果你添加了一大堆不屬於git(大型媒體文件,緩存等)的文件,這些文件已經被刪除並且花費很長時間時間推到您的生產服務器(因爲你提到你忘了從.gitignore文件開始)。所有的文本文件都在git中壓縮,所以不必擔心你做了多少次提交(作爲比較,PHP source code有超過70,000次提交,可追溯到14年,linux kernel提交了超過300,000次提交,並且許多其他成功的公開源代碼項目也是這樣 - 即使你已經提交了1000次提交,你幾乎不能抓住git可以處理的內容)。

在這種情況下,你正在談論的是擦除你的整個歷史並創建一個新的空白git存儲庫。您只需刪除/.git目錄,然後初始化一個新目錄(從Tower或命令行git init)。

注意,如果您創建了一個新的存儲庫,然後嘗試推送到登臺服務器,則需要使用--force選項,否則它會抱怨您正在嘗試重寫歷史記錄(您是)。當您點擊推送時,Tower有一個類似的強制複選框。

你肯定可以在事後添加.gitignore文件。但是,請記住,這不會刪除以前添加到存儲庫的任何文件。因此,最好避免首先提交文件,否則它們會永久存在於您的存儲庫歷史記錄中(有許多方法可以重寫歷史記錄,甚至可以從舊提交中正確刪除所有文件的痕跡,但它們很難並且超出了範圍這個答案)。

3

正如Adrian所說,除非你在Git中有大量的二進制文件(例如圖片上傳等),否則這不是一個真正的問題。就我個人而言,我不會破壞我的歷史,因爲它對於調試是非常寶貴的,儘管我對我所承諾的事情以及經常進行紀律處分。

如果您想刪除您的回購之前已添加的文件,但要保持一個本地副本做:

的git RM --cached /路徑/到/刪除

這將刪除他們從索引的當前狀態,但保留實際的文件,然後您可以添加到您的.gitignore。這對只是錯誤地添加到git的文件,或者對於不需要回購大小或安全性的小文件都很方便。

但是,如果您之前提交過這些文件,它們仍然會存在於您的歷史記錄中,因此您的總回購大小可能會被誇大(例如,如果您以前添加了PSD或某些大圖像。完全從歷史記錄中刪除一個文件(也很方便,如果在某種程度上敏感數據躡手躡腳),你可以這樣做:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch <NAME OF FILE>' --prune-empty --tag-name-filter cat -- --all 

此命令將運行分支或標籤的整個歷史,改變任何承諾所涉及您指定的文件,以及之後的任何提交。之後提交的提交(因爲它們只改變了Rakefile)被完全刪除。警告:它會覆蓋現有標記a脹。

一旦你已經刪除了文件,你可能需要強制與推你的變化:

git push <remote> <branch> --force 

但是你想成爲非常肯定你在這一點上做正確的事來,因爲你也會覆蓋遙控器上的歷史記錄,並且在那時它確實會消失。如果沿着這條路線走下去,有一個很好的,更詳細的教程here

雖然您正在使用Beanstalk,但這不是一個主要問題,因爲它只會部署最新版本的文件,而不是您的整個回購/歷史記錄。

4

請注意,Beanstalk將只部署您的文件的最新版本(或者如果你想要任何其他修訂版)。因此,當您添加生產服務器時,Beanstalk會將當前存儲庫中的所有文件上傳到生產服務器。

它不會通過更改來部署它,所以任何「歷史記錄」都不會減慢速度或使用任何空間。

+0

謝謝!這幾乎減輕了我的任何擔憂。 –