我正在尝试为我工作中的所有提交全局启用几个git hook。我通过设置
来实现这一目标git config --global init.templatedir '~/.git_template'
我想启用此功能,以确保我工作中的所有提交消息都具有相应的错误ID。这完全符合我的预期。
现在我的问题是,当我想向我的个人github帐户提交某些内容时,会触发这些我不想要的挂钩。
如何仅将这些全局模板限制为特定的github实例?我可以通过配置$HOME/.ssh/config
文件来分离SSH密钥。这里有类似的东西吗?
我的限制很少:
$REPO/.git/hooks
文件夹,它会失败,因为我必须始终提醒自己设置它们答案 0 :(得分:0)
您不想在当地将配置设置为您的仓库吗?所以不是做--global,而是做一个--local,所以配置选项在两个repos之间有所不同(假设你有两个不同的repos,一个用于工作,另一个用于你的个人/家庭用途)。
来自https://git-scm.com/docs/git-config: " ...编写时,默认情况下将新值写入存储库本地配置文件,并且可以使用选项--system, - global, - file来告诉命令写入该位置(你可以说--local但这是默认的。)"
- 全球
对于写入选项:写入全局〜/ .gitconfig文件而不是存储库.git / config,如果此文件存在且写入〜/ .gitconfig文件,则写入$ XDG_CONFIG_HOME / git / config文件。
对于阅读选项:只读全局〜/ .gitconfig和$ XDG_CONFIG_HOME / git / config而不是所有可用文件。
- 本地
写入选项:写入存储库.git / config文件。这是默认行为。
对于阅读选项:只读取存储库.git / config而不是所有可用文件。
答案 1 :(得分:0)
有几种方法可以解决这个问题:
首先,您可以使用单独的git别名,例如clone-personal
或init-work
,它们会向--template
或clone
子命令传递不同的init
参数每个环境。当然,您必须记住使用这些别名而不是简单的init
或clone
,这不是理想的。
对于克隆,您可以通过将传入的URL与特定模式匹配来进一步采取上述步骤,以确定它是工作与个人地址,然后自动传递正确的--template
选项。这将允许您使用一个脚本/别名进行克隆。
如果你有别名执行shell命令(或者只是使用单独的shell脚本而不是git别名),它也可以查看你环境中的任何内容(例如,$ PWD以确定你是否在& #34; work"子目录或" personal"子目录)然后将不同的--template
选项传递给git。然后你可以使用一个别名/脚本/ bash函数(对于每个子命令)。
如果您的工作与个人存储库之间存在其他配置项(除了挂钩),您可能希望使用更简单的选项,而不是全局定义user.email配置字段。在这种情况下,git将禁止您在第一次尝试时提交,并且您需要定义user.email配置字段。然后,您可以使用在存储库中手动运行的自定义别名/脚本/ bash函数来配置它以用于“工作”。或者'个人'环境。例如,git-config-work
bash函数可以在您的钩子中复制,并在本地配置user.email
以进行工作存储库提交。