2014-01-09 18 views
3

已經跟着從this article說明我有一個後收到鉤目前寫着:混帳:部署只從一個目錄後收到鉤

#!/bin/sh 
git --work-tree=/home/user/example.com --git-dir=/home/user/example.com.git checkout -f 

這是運作良好 - 所有的文件和目錄越來越部署。不過,我只想從example.com.git的Build文件夾中部署這些文件(順便說一句,我使用的是Hammer),因此並非所有的開發文件都可以在活動服務器上使用和查看。

問題:爲了僅檢查/部署Build目錄中的內容,我對上述Git命令做了哪些修改/添加?

更新: 在評論的討論後,我來到以下,這對我的情況。

#!/bin/sh 
git --work-tree=/home/user/example.com --git-dir=/home/user/example.com.git checkout -f master -- Build/ 
cd /home/user/example.com 
cp -rRp Build/. . 
rm -rf Build 
+0

難道你最終會得到不需要的文件嗎?用你自己提供的答案?除Build /之外的其他所有東西都會在那裏,不是嗎?我認爲@ yanhan的答案(使用git checkout的)更好。 –

回答

4

我會縮寫供給--work-tree--git-dir值作爲WTREPO分別使一切都可以適應沒有水平滾動條。

的一般形式應該是:

#!/bin/sh 
git --work-tree=WT --git-dir=REPO checkout -f -- paths 

假設在多數民衆贊成在部署現場服務器上的目錄WT,您只需要簽出Build文件夾在資源庫中。這成爲

#!/bin/sh 
git --work-tree=WT --git-dir=REPO checkout -f -- Build 

一般情況下,你可以在Git倉庫的一個或多個文件替換paths部分。根據它們放置在回購庫中的方式,它們被指定爲相對路徑。所以,如果你的混帳回購協議是這樣的:

FolderOne 
|- FolderTwo 
| |- FileOne 
|- FolderThree 

FolderFour 
|- FileFive 

而且要檢出FileOne,一切FolderFour,你應該做的:

git --work-tree=WT --git-dir=REPO checkout -f -- FolderOne/FolderTwo/FileOne FolderFour 

UPDATE:

它已經因爲一些時間我已經處理了Git鉤子,但我認爲除了像stdin和argv這樣的一些細節之外,您可以放入任何東西。

所以在Build文件夾中檢查出的一切,但不是Build文件夾本身,你可以在做這樣的事情後收到鉤:

git --work-tree=WT --git-dir=REPO checkout -f -- Build/ 
cd WT 
cp -r Build/* . 
rmdir Build 

所以我們首先檢出Build目錄到WT目錄。然後我們cd進入WT目錄,使用cp -r Build/* .複製Build目錄中的所有內容。 .代表當前目錄,即WT目錄我們只需要將cd轉換成。完成後,我們刪除空的Build目錄。

因此,Build目錄中的所有內容現在都檢出到WT目錄中,而不包含Build目錄本身。當然,你必須分別用工作樹和git倉庫的實際路徑代替WTREPO

希望可以幫到

+0

這工作。雖然我想包含Build文件夾中的所有內容,但不包括文件夾本身。我嘗試使用Build/*,但沒有任何運氣。 – Eystein

+0

在這種情況下,我相信你可以按照'cp -r REPO/Build/* WorkTree'的方式來做一些事情。 – yanhan

+0

你可以爲我拼出來嗎?我不太習慣Git。我用我自己的文件路徑嘗試了一些變化,但沒有結果。 – Eystein