![](/img/trans.png)
[英]Git pre-commit hook that automatically grants execution permissions (+x) on all .sh files which are being committed
[英]How do I access the contents and names of files being committed from within a Git hook script?
我對如何正確實現git hook感到有些困惑,而且我無法弄清楚如何從腳本中訪問所需的任何類型的信息。 我幾乎沒有腳本編寫/使用Python的經驗。
我只想訪問要在預提交掛鈎中提交的文件名(以及文件的內容),以便檢查它們是否符合命名約定。 我看到過這樣的帖子,例如一個Git服務器鈎子:獲取要推送的文件的內容? ,張貼者提到他如何通過調用git diff --cached --name-status --diff-filter=AM
獲得文件列表。
很抱歉,這是一個愚蠢的問題,但是如何在腳本中調用此行並將其設置為等於某行? 我將這一行識別為Git命令,但是我很困惑如何將其轉換為代碼。 在python中看起來像什么?
這是我目前用於預提交模板的全部內容。 它只是在Python中進行測試打印及其打印。
#!/usr/bin/env python
import sys
print("\nError details\n")
git diff-index --name-status HEAD | grep '^[MA]'
這是我所知道的最可靠的方法。 它打印出帶有M或A前綴的名稱,后跟一些空格,后跟名稱,以指示文件是“已修改”還是“添加”。
不過,還有一些額外的魔術。 我建議:
git stash --keep-index
git diff-index --name-status HEAD | grep '^[MA]'
git reset --hard
git stash pop --quiet --index
這將為您提供暫存區域中的名稱列表(通過存儲自上一個git add
命令以來的所有更改),然后立即恢復工作空間。 由於您要提交的是暫存區而不是工作區,因此這可能就是您想要的。
我有一個程序可以在https://github.com/elfsternberg/pre-commit-stash上完成所有這些操作
它是用Hy編寫的,Hy是Python的一種方言,大多數人幾乎不了解甚至無法閱讀。 不過,Hy確實帶有hy2py編譯器,因此,如果您確實需要它,此腳本將向您展示它是如何完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.