2012-11-02 55 views
1

我已經閱讀了大量的帖子,似乎讓我接近但不是所有的方式,我想要的。我有一臺服務器。對此,我有3個網站:www.domain.com,staging.domain.com和dev.domain.com。我也在local.domain.com上開發,也使用GitHub作爲我的中心回購。生產,分期,開發網站和git倉庫在同一臺服務器上:如何設置GIT_DIR和GIT_WORK_TREE

我想讓我的git存儲庫遠離我的web根目錄。我打開如何做到這一點。我想要的是:

/home/user/git/production.git 
/home/user/git/staging.git 
/home/user/git/development.git 

我知道如何做到這一點,如果通過設置GIT_DIR和GIT_WORK_TREE這裏只有1個網站和回購(我出口中的.bash_profile路徑)。

看來我可以在每個倉庫的config設置工作樹,如:

[core] 
    bare = false 
    worktree = /home/user/domains/www.domain.com/public_html 

但我怎麼設置GIT_DIR

所以,如果我在/ home /用戶/域/ WWW .domain.com /的public_html並做了git status等,它指的是生產混帳回購協議。如果我處於/ home/user/domains/分段 .domain.com/public_html,它與分段 .git綁定。

+0

我已經用這種方式解決了使用git的dev/staging/production問題......我的主brnach是我的開發分支的頭(我在本地開發......)。然後,我創建一個反映配置更改的分支,以使其暫存,然後從暫存分支創建另一個分支,以更改生產配置。每當我準備好部署時,我會將我的舞臺和製作分支(在爲歷史原因標記爲版本之後)重新分配到我的開發分支上......這樣可以讓所有的東西都很漂亮,並且在一個git樹中。 – g19fanatic

回答

3

而不是設置$GIT_DIR你可以使用gitlink文件。要做到這一點只需進入各工作樹的根目錄並運行:

echo "gitdir: /home/user/git/production.git" > .git 

這將導致.git文件在網絡根,但如果有人訪問,將泄漏的唯一的事情,這將是該路徑存儲庫。這將避免需要根據你所在的目錄設置$GIT_DIR變量來玩遊戲。

+1

漂亮!以前從未見過。關於[gitrepository-layout man page]的特性描述(http://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html)。 –

+0

哇,這很簡單,就像一個魅力!我想說明如何逐步建立這個開發/ git環境,以便其他人可以從我在這裏和其他地方找到的所有提示中受益。任何人都可以提出一個好的地方來記錄這個,也許維基風格。例如,Stack Overflow,GitHub,Gist還是其他類似的地方,其他人可以找到它,甚至可能有所貢獻? –

0

你想做什麼?

當你在你的/home/user/git/production.git它應該檢測工作目錄爲/home/user/domains/www.domain.com/public.html和推/拉/結帳應該在那裏工作得很好。不幸的是,git並非通靈 - 從一個沒有.git文件夾的隨機目錄中,git甚至不知道在哪裏尋找配置文件(沒有a "gitdir" file,正如我剛剛從其他答案中瞭解的那樣)。

你總是可以通過git --git-dir=~git/production.git checkout ...等等,但我敢打賭你正在尋找一個自動化的解決方案。

也許嘗試將git包裝在shell腳本中?如果你把這個作爲~/bin/autogit

#!/bin/bash 
DIR=$(pwd) 
if (fgrep -q domains/www.domain.com <<< "$DIR"); then 
    git --git-dir=/home/user/git/production.git [email protected] 
elif (fgrep -q domains/staging.domain.com <<< "$DIR"); then 
    git --git-dir=/home/user/git/staging.git [email protected] 
elif (fgrep -q domains/local.domain.com <<< "$DIR"); then 
    git --git-dir=/home/user/git/development.git [email protected] 
fi 
echo "Autogit failed from directory $DIR." 
exit 1  

(附註:爲什麼你有三個回購協議,我找到了更常見的有一個回購有三個不同的分支的名稱,並檢查了每一個腳本分支到其相應的目錄。)

+0

因爲每個工作樹都需要一個不同的'HEAD',所以每個工作樹需要有一個回購。有'git.git'中的'contrib/workdir/git-new-workdir'腳本可以解決這個問題,但如果不小心使用它可能會有點危險。 – qqx

相關問題