2012-09-11 59 views
0

所以我決定在本地安裝Git的Windows版本(我做的是Unix web開發,但也是.NET開發,所以似乎在我的.NET項目上運行UNIX上的Git)。「Checkout」修改Git中的文件進行部署

對於Web開發工作,我只是用FTP自己部署它,但想問一下:有什麼方便的方法讓Git爲一部分文件構建一個目錄結構,例如特定於某個特定文件的所有文件科?

例如:說我有這樣的web服務器的文件結構

/public_html/index.php 
/public_html/config.php 
/public_html/style/style.css 
/public_html/style/typography.css 

本地我只修改的index.php和style.css的

,如果有一些方法來「結賬」這將是很好這些文件並讓它構建完整的文件路徑。在Visual Source Safe中,它實際上將所有文件存儲在VSS數據庫中。所以你可以刪除你的工作副本,並檢出一些文件,然後將它們寫入你的工作目錄中相應的目錄結構中。 GIT中有這樣的東西嗎?如果您刪除

git checkout HEAD -- <file> 

所以:如果是這樣的話,我可以只導出修改過的文件並上傳的根文件夾(/的public_html)服務器

+0

Git有功能做你想做的任何東西。請描述你真正想要在更高層次上實現的目標。我們可以推薦一個分支,叉子,克隆等類似的git方法,但我們首先需要知道你的總體目標。 –

+0

例如,如果您有要保存的文件,可以爲它們創建分支,在那裏工作,根據需要將目錄複製到另一個目錄等,這完全取決於您真正要實現的目標。 –

+0

我想我已經詳細解釋了我真正想做的事情,但是我會很樂意詳細說明你是否可以告訴哪個區域需要更多細節。 基本上我想寫出一部分文件,所以我可以將它們上傳到我的服務器。如果我爲我添加到我的網絡應用的新功能創建分支,並且在該開發過程中我接觸了5或6個文件,我不想上傳整個網站(大小爲X GB)。所以我想從Git的「導出」,該分支中的文件,所以我可以輕鬆地將它們上傳(FTP)到Web服務器。 –

回答

1

結賬git diff-tree。您可以使用它比較兩個提交樹的狀態並確定哪些文件已更改。例如:

git diff-tree --name-status -r `git merge-base master mybranch` mybranch 

將顯示任何已更改的文件的名稱和狀態。如果您確定刪除的文件等內容仍能正確處理,您還可以使用--name-only而不是--name-status

(當然,用``命令替換爲一個UNIX殼結構;在Windows上,您可能需要使用像FOR/F)

然後,您可以通過這個命令傳遞列出的文件git checkout 。如果您要檢查的文件到一個單獨的目錄,你可以使用--work-tree參數:

git --work-tree=path/to/build checkout mybranch -- file file file... 
0

你可以恢復索引最近任何file副本一個文件在您的工作目錄中,您可以使用該命令「恢復」該文件。

+0

請查看整個問題。我不確定你是否真的瞭解了大局。很高興回答任何問題。 –

+0

@MaxHodges害怕我不太確定你想要做什麼。 「從git導出」在這種情況下沒有多大意義,因爲git會跟蹤文件工作目錄的更改。如果你改變工作目錄中的文件,你可以「tar」和ftp,而不用碰git。 – Christopher

+0

這個想法是,雖然我的工作目錄中可能有10,000個文件,但我可能只更改了5或10個來實現新功能。只是想知道如果在分支機構開發過程中是否會「結帳」或「寫出」僅受影響的文件,那麼我可以輕鬆上傳它們。而不是上傳所有10,000個文件。 –