在执行git init之后自动提交一个空的.gitignore文件吗?

9
我想要在所有的 git 仓库中启动“空”初始提交,方法是简单地创建一个空的 .gitignore 文件并提交。我的理由与这个问题中的差不多。基本上,第一次提交(“尾部”)没有父提交,因此会发生各种奇怪和意外的事情,这些事情在其他提交中不会发生。
那么是否有类似于 post-init 钩子的东西,我可以用它来跟随每一个 git init,使用 touch .gitignore && git commit .gitignore -m "Initial commit"?还是应该编写自己的定制初始化命令来完成这个操作?
3个回答

14
如果你想要在仓库中提交更改,请不要使用git init——它会创建一个空的仓库!请使用git clone。只需创建一个带有.gitignore文件的仓库,并在需要时克隆该仓库即可(如果您希望任何地方都可以访问,可以将其公开托管在Github上)。
另外,在本地计算机上,您也可以为所需操作创建git别名:
[alias]
    myinit = !git init && touch .gitignore && git add .gitignore && git commit -m "empty gitignore"

请注意:您不能使用与内置命令相同的名称创建别名。


我应该在前面加上 git status &>/dev/null || 或者其他什么东西吗?这样,如果当前目录中已经存在一个 git 仓库,myinit 命令就不会执行任何操作了。 - Ryan C. Thompson
@Ryan:如果你想的话,你可以这样做,但这并不重要 - 在现有的仓库中执行git init会重新复制模板(特别是*.sample钩子)并创建目录结构(实际上没有任何操作)。如果你加了前缀,git status并不是你想要的 - 它会比较慢。我建议使用git rev-parse HEAD &> /dev/null。只有在HEAD指向一个提交的仓库中才会成功 - 也就是说,如果你已经运行过git init,它将失败,从而导致你后续的步骤发生。 - Cascabel
哦,你可以把它发布在这里,这样我就可以接受它作为答案了吗? - Ryan C. Thompson
只是提醒一下,在Windows上使用命令行Git时,提交描述需要使用单引号而不是双引号。 - davidcesarino

3
当你执行git init命令时,会初始化.git目录(其中包含钩子)的默认值。因此,在git init后就不存在任何钩子了。假设有一个“post-init”钩子是无用的,因为它可以运行的唯一时间是在初始化钩子目录时(并且不包含任何活动钩子)。
听起来你最好编写一个自定义命令来完成这个任务,因为钩子不是合适的解决方案。

是的,我意识到Git所指的挂钩不是解决这个问题的正确方式。这就是我说“类似”挂钩的原因 - 我只是指任何在运行git init后触发自定义行为的方法。 - Ryan C. Thompson

3

虽然不太美观,但它可以工作。每当你想要初始化一个仓库时,请运行以下两个命令。

git init
touch .gitignore

接着,为确保git跟踪你的.gitignore文件,请执行以下命令:

git add .gitignore
git commit .gitignore -m "Adding .gitignore"

根据您设置存储库的方式,您可能已经执行了后两个命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接