簡體   English   中英

是否可以提交預提交掛鈎?

[英]Is it possible to commit the pre-commit hooks?

我們為我們的 Python 項目設置了預提交掛鈎。 pre-commit位於未跟蹤的.git文件夾中(有充分的理由)。

但是對於一個新人來說,克隆一個 repo 並忘記啟動提交鈎子是很常見的。 有可能自動化嗎? 例如,通過 git 跟蹤提交掛鈎? 或者通過其他一些機制,例如當git clone時,鈎子會自動設置。

例如,將..git/hooks/pre-commmit.gitignore並不能解決問題。

不,這是不可能的。

(有趣的是,這回答了你的問題,我建議將其重命名為“如何提交預提交掛鈎”)

我不確定如何在沒有構建系統的 python 項目中執行此操作。 您可以在自述文件中添加一些行。

我們在 dotnet 和 android 項目中所做的事情:我們在我們的項目中添加了一個可以設置掛鈎的階段。 開發人員很有可能在提交之前至少構建一次項目。

我們有目錄/git_hooks和從中復制文件的腳本:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Message Text="Install Git Hooks" Importance="high" />
    <Copy SourceFiles="$(SolutionDir)/git_hooks/pre-commit" 
          DestinationFolder="$(SolutionDir)/.git/hooks" 
          ContinueOnError="true" 
          SkipUnchangedFiles="true" />
</Target>

或者

buildscript {
   //.....
    copy {
        from "./git_hooks"
        into "./.git/hooks"
        fileMode 0777
    }
}

在 Android 上。

您不能自動執行此操作,因為掛鈎可以運行任意代碼,並且任何自動設置掛鈎的機制都將是一個安全漏洞,因為它會讓存儲庫的所有者在開發人員機器上執行任意代碼。

但是,您可能希望將它們簽入存儲庫中的某個位置,然后設置一個標准腳本(例如GitHub 使用的那種),它安裝掛鈎並准備存儲庫以供使用。

但是,我鼓勵您閱讀Git 常見問題解答條目關於pre-commit掛鈎 它指出它們是用來幫助開發人員的,而不是作為一種有效的控制,因為它們很容易被繞過而無需通知。 此外,許多使用頻繁壓縮和變基的工作流的開發人員(我就是其中之一)發現pre-commit鈎子是他們標准工作流的一個令人討厭的障礙,因為許多臨時提交被創建和銷毀。 因此,您最好使用 CI 系統來驗證測試和代碼樣式等內容,並讓開發人員可以選擇使用鈎子(如果他們想使用它們)。

這是可能的,但不推薦。

初始化存儲庫時,它會從git 模板復制掛鈎。 我們可以在模板中創建一個post-checkout 這是一個示例:

#!/bin/bash

gitworktree=$(git rev-parse --show-toplevel)
if [[ -f ${gitworktree}/pre-commit ]];then
    echo deploy pre-commit
    cp -v ${gitworktree}/pre-commit ${gitworktree}/.git/hooks/pre-commit
    chmod a+x ${gitworktree}/.git/hooks/pre-commit
fi

在沒有-ngit clone之后, post-checkout會自動復制到新存儲庫的.git/hooks中。 然后簽出代碼並調用post-checkout 如果新存儲庫中存在pre-commit ,則將其復制到.git/hooks 這只是一個草案計划。 在實際案例中可能存在一些問題。 例如,我們如何處理模板中已經存在的pre-commit 是否有必要檢查pre-commit是否是已提交的? 如果pre-commit中有惡意代碼怎么辦?

正如其他答案所說,這不是一個好主意。 不要在生產環境中這樣做。

看看https://pre-commit.com/

您可以使用您的鈎子創建一個單獨的存儲庫並在您的項目中使用它。 使用是通過 YAML 文件配置的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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