2012-01-14 101 views
3

所以我想要一個非常簡單的git腳本,通過cron每10分鐘更新一次github上的存儲庫,以便我的bug跟蹤系統可以獲取這些更改。git fetch && git reset --soft不更新提交

在創建所述腳本之前,我做了一個裸體克隆,因爲它實際上不是一個工作空間,它只是用於我們的問題跟蹤系統(Redmine)。裸露的克隆工作得很好,當我們進入問題跟蹤器時,我們可以很容易地看到所有的提交。

git clone --bare [email protected]:yoyodyne/coolproject.git coolproject.git 

一個我期待更新通過cron這個回購這樣的:

#!/bin/sh 
export GIT=/opt/bitnami/git/bin/git 
cd /var/redmine/git_repositories/coolproject.git && $GIT fetch 
    && $GIT reset --soft 

但當cron的運行它更新新的提交併返回以下消息:

From github.com:yoyodyne/coolproject 
* branch   HEAD  -> FETCH_HEAD 

我之前在其他項目中使用過這種方法,它完全可以工作,實際上我使用這種方法作爲以前項目的模板。下面的鏈接已經被前後讀到,我仍然在拍攝空白。

http://www.redmine.org/projects/redmine/wiki/RedmineRepositories

http://gitref.org/remotes/

+2

您是否嘗試過'混帳pull'? – 2012-01-14 16:57:04

+0

您不應該需要重置,因爲沒有與裸倉庫相關聯的工作樹或索引 – knittl 2012-01-14 17:08:09

+0

爲什麼Redmine文檔告訴我這樣做?這是一個複製粘貼。糟糕的文檔?研究你的建議,將會報告結果。 – 2012-01-15 04:26:03

回答

1

所以我做了大量的搜索,我發現這是一個晦澀的帖子關於refs不工作。

https://github.com/koppen/redmine_github_hook/issues/10

#!/bin/sh 
export GIT=/opt/bitnami/git/bin/git 
cd /var/redmine/git_repositories/welocally-places.git && 
    $GIT fetch origin '+refs/heads/*:refs/heads/*' && $GIT reset --soft 

我改變了我的劇本和它的工作,唯一可悲的是,我覺得誰模仿奇怪的無毛猿猴子。

+0

你可以(也應該)放棄'reset --soft'。它什麼都不做。當使用無參數提取時,您也可以調整資源庫的配置以默認使用該refspec。 – 2012-01-15 12:35:19

1

你正在處理一個純倉庫。不要使用重置。 Git checkout ref - 。會更好。那個或者git檔案。

如果你指定工作樹和git倉庫,你可以使用重置。這是設置環境變量的替代方法。這些選項在git命令本身上可用。

+0

當我嘗試使用git checkout master(這就是我認爲你的意思是「ref」)時出現錯誤 >致命:此操作必須在工作樹中運行 – 2012-01-15 04:39:18

+0

「checkout」對於裸設備存儲爲'reset'。你必須使用'git symbolic-ref HEAD'在裸倉庫中更改'HEAD',但這並不能真正解決問題。 – 2012-01-15 12:33:48

+0

如果你指定它工作的工作樹 – 2012-01-15 21:47:03

3

我不知道爲什麼,文檔推薦在裸克隆做git resetgit reset不是一個純倉庫(即使--soft實際上不更改索引或工作樹)有效,如果它的工作這將是一個no-op

做最簡單的事情是建立一個反映所有分支和標記的獲取規則:

git config remote.origin.fetch +refs/heads/*:refs/heads/* 
git config --add remote.origin.fetch +refs/tags/*:refs/tags/* 

那麼簡單git fetch會更新這個克隆的所有分支和標籤從遠程倉庫類似於如果它已經與git clone --bare --mirror一起設置的方式。

+0

Effing leeeeeeeeeeeeeeeeeeeeeeegend。正是我所需要的,這使得沒有我目前的一個整潔的crontab行(由於某些原因,有&&的...)。 1UP – nevelis 2012-10-11 05:28:52

0

要使用

git clone --mirror 

,而不是--bare回購的git的-fetch工作,只要你想它