簡體   English   中英

如何在Git鈎子腳本中訪問要提交的文件的內容和名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM