我正在使用git來管理我擁有的grails項目。我在遠程服務器上建立了一個git倉庫,我想要做的是當我有本地代碼工作時,我想提交它並推送到遠程服務器。我希望更新後的groovy文件和gsp被放到遠程服務器上的正確位置,以便grails能夠接受遠程測試的更改。這可能嗎?如何使用git檢入文件?
回答
如果你推送到一個遠程回購,其中「它似乎只包含一個大包裝文件,沒有實際的源代碼「(如你在註釋中詳細說明的那樣),這應該意味着」bare repo「,這對它有好處,它可以讓你在工作樹和git數據之間沒有任何差異的風險。
然後,如「Can I use git to keep a remote server up to date?」中所述,裸露回購方面的另一個(非裸回購)和post-update hook
會將您帶到您想要的地方。
的OP TripWired補充說:
好了,所以我所做的是:
- 創建裸回購在隨後
- 檢查我創造了另一個回購,這是標準,基本上我有
~/project.git
和~/project
。 我克隆
project.git
到project
和project.git/hooks/post-update
我把:CD ../../project ENV -i git的結帳。 ENV -i混帳拉
我也確信,更新後爲可執行文件。
當我從命令行運行鉤子時,它工作正常,但它似乎沒有工作時,我做了檢查回購。
我同意步驟1和2,但會使用this script,如this question。
檢查它是否與git push
一起從您當地的回購協議到裸回購協議。
#!/bin/sh
#
# This hook does two things:
#
# 1. update the "info" files that allow the list of references to be
# queries over dumb transports such as http
#
# 2. if this repository looks like it is a non-bare repository, and
# the checked-out branch is pushed to, then update the working copy.
# This makes "push" function somewhat similarly to darcs and bzr.
#
# To enable this hook, make this file executable by "chmod +x post-update".
git-update-server-info
is_bare=$(git-config --get --bool core.bare)
if [ -z "$is_bare" ]
then
# for compatibility's sake, guess
git_dir_full=$(cd $GIT_DIR; pwd)
case $git_dir_full in */.git) is_bare=false;; *) is_bare=true;; esac
fi
update_wc() {
ref=$1
echo "Push to checked out branch $ref" >&2
if [ ! -f $GIT_DIR/logs/HEAD ]
then
echo "E:push to non-bare repository requires a HEAD reflog" >&2
exit 1
fi
if (cd $GIT_WORK_TREE; git-diff-files -q --exit-code >/dev/null)
then
wc_dirty=0
else
echo "W:unstaged changes found in working copy" >&2
wc_dirty=1
desc="working copy"
fi
if git diff-index --cached [email protected]{1} >/dev/null
then
index_dirty=0
else
echo "W:uncommitted, staged changes found" >&2
index_dirty=1
if [ -n "$desc" ]
then
desc="$desc and index"
else
desc="index"
fi
fi
if [ "$wc_dirty" -ne 0 -o "$index_dirty" -ne 0 ]
then
new=$(git rev-parse HEAD)
echo "W:stashing dirty $desc - see git-stash(1)" >&2
(trap 'echo trapped $$; git symbolic-ref HEAD "'"$ref"'"' 2 3 13 15 ERR EXIT
git-update-ref --no-deref HEAD [email protected]{1}
cd $GIT_WORK_TREE
git stash save "dirty $desc before update to $new";
git-symbolic-ref HEAD "$ref"
)
fi
# eye candy - show the WC updates :)
echo "Updating working copy" >&2
(cd $GIT_WORK_TREE
git-diff-index -R --name-status HEAD >&2
git-reset --hard HEAD)
}
if [ "$is_bare" = "false" ]
then
active_branch=`git-symbolic-ref HEAD`
export GIT_DIR=$(cd $GIT_DIR; pwd)
GIT_WORK_TREE=${GIT_WORK_TREE-..}
for ref
do
if [ "$ref" = "$active_branch" ]
then
update_wc $ref
fi
done
fi
這聽起來像它可能工作。因此,如果我擁有裸存儲庫並更新我的更新後掛鉤,我可以使用它將源代碼複製到另一個目錄中?我假設我需要一個類似於我的本地機器上的git repo,它只是從裸回購中做一個克隆? – TripWired 2010-01-29 18:57:45
是第一次,是(在最簡單的情況下)第二次。如果回購規模巨大是一個問題,我可以想到更復雜的方法來避免重複,但我懷疑你是否屬於這種情況。 – Cascabel 2010-01-29 19:12:14
好吧,所以我做的是創建裸露的回購檢查然後我創建了另一個標準回購,基本上我有〜/ project.git和〜/項目。我克隆project.git到項目和project.git /鉤子/後更新我把:(cd ../../project)(env -i git結帳。)(env -i git pull)parens只是爲了分開在這裏的線。我也確保更新後的版本是可執行的。當我從命令行運行鉤子時它工作正常,但它似乎並沒有工作,當我做檢查到回購。有任何想法嗎? – TripWired 2010-01-29 21:22:57
如果你在linux上,你可以設置一個cron作業來爲你複製文件,或者如果你在windows上,你可以使用小的bat或vbs腳本創建一個計劃任務,以將文件複製到遠程服務器。如果您在使用Git時需要幫助,請參閱用戶手冊。如果這不是你尋找的東西,我們可以開展一些更好的工作,或者如果你需要幫助,請告訴我。
關於您對Alos的帖子的評論:遠程是所謂的裸倉庫 - 它包含除簽出的內容副本之外的整個倉庫。這個想法是,對於您只需推送和從中拉出的中央存儲庫,就不需要擁有這些文件。
也就是說,有很多方法可以做你想做的事情。
您可以創建另一個遠程非光禿克隆,並使用它從光禿禿的克隆中拉出並進行測試。這可能是最簡單的。
你可以直接檢查出從裸露的回購協議文件(使用
git read-tree
和git checkout-index
)(一個例子想到,git.git的install-doc-quick.sh)。您甚至可以使用非裸露的遠程控制器,但請記住,因爲工作樹不會更新,因此推入非裸露的回購區是非常危險的。根據你的git版本,有各種不同的安全措施需要覆蓋,你可以在推送後修復工作樹(可能是
git reset --hard
)。
無論哪種方法你拿,假設你想每推後觸發你的測試,你可以使用post-receive or post-update hook這樣做。 (如果你想避免突發性的重複測試,你可以檢查自上次測試以來的時間長度)
- 1. 如何檢索使用Git藏匿未跟蹤文件
- 2. 在Git中檢入單個文件?
- 3. 如何檢入預先提交的文件到git存儲庫
- 4. 如何使用git恢復文件?
- 5. 如何使用Git跟蹤.txt文件?
- 6. 如何使用Git下載文件
- 7. 如何將.txt.gz文件壓入git
- 8. 使用git文件
- 9. Git + Rails:如何恢復使用「git rm -r」刪除的文件?
- 10. 從git檢索源文件
- 11. Git的大文件檢測
- 12. 應該用git檢入capistrano配置文件嗎?
- 13. 如何檢查PDF文件是否使用嵌入字體?
- 14. 如何使用WKWebView檢索文件?
- 15. 如何使用git插件檢出特定的分支
- 16. 如何使用git來檢查本地文件夾是否包含更改
- 17. 如何刪除使用Git在幾次提交中檢查過的文件?
- 18. 如何使用git檢索所有未刪除的文件格式Repo
- 19. 如何使用Git從回購中檢索一個(或幾個)文件?
- 20. 如何使用檢查文件擴展名來導入CodeIgniter中的Excel文件?
- 21. 如何使用JQuery檢測文件輸入是否有文件被選中?
- 22. 如何檢查輸入類型=「文件」是否有文件或不使用jquery?
- 23. git如何比較文件?
- 24. git如何存儲文件?
- 25. 將zip文件壓入Git
- 26. 如何檢測如果一個文件應該在git的
- 27. 如何使用導入從文件寫入另一個文件?
- 28. 如何僅使用Git推送/拉取源(文本)文件?
- 29. 當用戶使用文件輸入選擇文件時檢測
- 30. 如何用Go解包git pack文件?
您使用的是linux,mac或windows嗎? – Alos 2010-01-29 18:09:41
遠程服務器是Linux,本地我有一臺Windows機器(使用龜git),我也有一個mac。所以我通過遙控器在這些機器之間同步代碼,但是我希望遙控器具有活動構建的Grails應用程序,該應用程序會在推送時進行更新。 – TripWired 2010-01-29 18:19:50
剛剛添加了一些建議作爲我的回答你的'更新後'執行的意見。首先查看該評論的最後一個鏈接。 – VonC 2010-01-29 21:52:34