2012-10-10 116 views
3

現在我已經掌握了Python的包管理,但是當我重新運行我們的代碼庫,然後對爲什麼不起作用感到困惑時,我一直讓團隊中的人員忘記重做pip install -r requirements.txt。 。也就是說,有沒有什麼辦法可以將命令綁定到其他任何他們必須做的事情上,比如git pull,這樣它們就可以爲他們完成,而且他們不需要考慮這個問題?在Git Pull上使用Pip install -r requirements.txt?

+0

我想看看[fabric](http://docs.fabfile.org/en/1.4.3/index.html) – jterrace

+0

一個腳本化的解決方案可以爲你自己,也可能讓人意識到他們如果/當他們不想考慮他們在做什麼,應該使用腳本解決方案;但教導/引起人們思考他們的行爲並非腳本化解決方案所能做到的。 – ThorSummoner

回答

4

您可以在git post-merge hook中使用shell腳本,每當合併發生時都會執行該腳本。請注意,這個鉤子會在每次合併時執行(實際上所做的一切都是合併,但並非所有合併都是合併)。

我不知道在克隆存儲庫時是否可以自動安裝客戶端鉤子,但您至少應該能夠安裝一次後合併鉤子,而不是讓團隊記住要做每拉一次。

+0

如果你想發佈一個嵌入了這樣一個鉤子的回購,你可以,擦洗你的.git/config和其他git元數據,以確保你不會分發其他限制;然後打包整個git倉庫,或者只包含作爲焦油/壓縮文件的'.git'部分,然後讓人們從中複製 - 提煉 - 工作。儘管我仍然想要首先教育你的用戶,但是對於絕望的場景來說,保留一些非常激動人心的東西。 – ThorSummoner

2

A post-merge掛鉤應該在這裏正常工作。在項目的.git目錄中打開文件.git/hooks/post-merge。將以下代碼片段粘貼到文件中。

#/usr/bin/env bash 
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" 

check_and_run() { 
     echo "$changed_files" | grep --quiet "$1" && eval "$2" 
} 

check_and_run requirements.txt "/path/to/virtualenv/bin/pip install -r /path/to/requirements.txt" 

運行chmod +x post-merge使文件可執行。

就是這樣。現在,每次你做混帳合併,requirements.txt文件pip install將會自動運行。

1

如果您有能力將工具添加到所有用戶的路徑中;例如,你們都在一臺服務器上工作。創建一個腳本來做到這一點將是微不足道的。

本質上,它是

#!/usr/bin/env bash 
# Save as `git-pull2` 
# Mark as executable (chmod +x git-pull2) 
# Include on system path. 

git pull [email protected] 
pip install -r requirements.txt 

@$將通過所有命令參數的腳本git pull,雖然我不能保證,將工作的全部100%的時間,但它應該覆蓋大多數使用情況。

你可以任意命名,我沒有測試用腳本替換git內部命令,例如我不建議將它命名爲git-pull,因爲這可能與真正的git-pull衝突並進入循環循環,但git也可能足夠聰明,不會像那樣遞歸。

當混帳擴展git關鍵字刪除後自定義命令第一個連字符,如運行git-pull2你可以從字面上運行它git-pull2或作爲嵌入式的git命令git pull2

相關問題