我对如何正确实现git hook感到困惑,我无法弄清楚如何从我的脚本中访问我需要的任何类型的信息。我对编写脚本/使用Python的经验很少。
我只想访问要在预提交挂钩中提交的文件的文件名(以及稍后的文件内容),以便我可以检查它们是否与命名约定匹配。我看过这样的帖子Git server hook: get contents of files being pushed?,海报提到他如何通过调用Private Sub CommandButton1_Click()
sText = "Company: ABC Company" & vbNewLine & "Class Period: 2013-10-29 through 2014-10-22" & vbNewLine
Set Reg1 = CreateObject("VBScript.RegExp")
vText = "Missing"
vText2 = "Missing"
vText3 = "Missing"
For i = 1 To 3
With Reg1
Select Case i
Case 1
.Pattern = "(Company)\w*[:](.*?)\n"
.Global = False
Case 2
.Pattern = "(Class Period\s*[:]+\s*([\d-\s]*))"
.Global = False
Case 3
.Pattern = "(through+\s*([\d-\s]*))"
.Global = False
End Select
End With
If Reg1.Test(sText) Then
Set M1 = Reg1.Execute(sText)
For Each M In M1
If M.SubMatches.Count > 0 Then
Select Case i
Case 1
vText = Trim(M.SubMatches(1))
Case 2
vText2 = Trim(M.SubMatches(1))
Case 3
vText3 = Trim(M.SubMatches(1))
End Select
End If
Next
End If
Next i
xlSheet.Range("A" & rCount) = vText
xlSheet.Range("B" & rCount) = vText2
xlSheet.Range("C" & rCount) = vText3
xlWB.Close 1
End Sub
获取文件列表。
如果这是一个愚蠢的问题,我很抱歉,但如何在我的脚本中调用此行并将其设置为等于某些内容?我认为这行是一个Git命令,但我很困惑如何转换为编码。它在python中是什么样的?
这是我目前为我的预提交模板所拥有的所有内容。它只是在Python中进行测试打印。
git diff --cached --name-status --diff-filter=AM
答案 0 :(得分:2)
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语写的,这是Python的一种方言,大多数人几乎都不知道甚至不能阅读。 Hy确实带有一个hy2py转换器,所以如果你真的需要它,这个脚本会告诉你它是如何完成的。