使用 Git 将文件标记为“不可提交”

使用 Git 将文件标记为“不可提交”

我想将我的一些作品上传到我的 GitHub 帐户来展示一下。但是,有些文件包含密码,例如数据库连接。

有没有办法用 Git 将文件标记为不可提交,以便它不会出现在 GitHub 上?

答案1

有没有办法用 Git 将文件标记为不可提交,以便它不会出现在 GitHub 上?

首先,无法让某些文件和提交在本地 Git 存储库中可见,但在 GitHub 中却无法查看;如果您在 Git 中提交了文件,它将显示在 GitHub 中。

其次,没有简单实用的方法可以将单个文件本身标记为“不可提交”。但是确实忽略 Git 仓库中的文件的方法:通过将文件(如果需要,包括它们的相对路径)添加到.gitignore文件

文件.gitignore指定 Git 应忽略的故意未跟踪的文件。Git 已跟踪的文件不受影响;有关详细信息,请参阅下面的注释。

创建基本文件.gitignore相当容易,因为它只是一个纯文本文件。例如,如果我config.php的根目录中有一个文件,您可以这样做;假设您使用的是 PHP,但该概念适用于任何设置。此外,我在此示例中使用 Nano 作为文本编辑器,但您可以随意使用您通常使用的任何文本编辑器:

nano .gitignore

只需将该文件名添加到该文件即可:

config.php

保存它,现在 Git 将会忽略该文件。

也就是说,对于这样的设置,我喜欢在存储库中保留一个不含敏感细节的样本/示例配置,这样我就可以参考配置文件格式,该文件的名称如下:

config.SAMPLE.php

这样,您就确切地知道如何config.php设置文件,config.SAMPLE.php并且可以确保config.phpGit 永远不会触及实际情况。

此外,如果您打算展示您的代码,您需要预料到有人会尝试以某种方式获取该代码并在他们自己的系统上实现它。请记住,我们不是您,如果您的存储库中没有示例配置文件,人们将无法真正理解如何自己实现代码。他们甚至可能认为您不够称职,因为您没有提供基本的配置示例。

答案2

您还可以添加预提交钩子来实现健全性检查。.git/hooks每个 git 存储库的目录中都有一些示例脚本。

如果调用的脚本pre-commit在每次提交之前存在,则执行该脚本,非零返回值将中止提交。

例如,您可以有如下简单脚本:

#! /bin/sh -e
git ls-files --cached | grep -qx 'filename' && { echo "Excluded file included in the commit" >&2; exit 1; }
exit 0

如果filename匹配,提交则失败。

答案3

什么@Giacomo1968 在他们的回答中说。在某些情况下,您还可以使用特殊文件位,例如skip-worktree或,assume-unchanged可以通过以下方式设置;对于两者之间的差异,请参阅此 Stack Overflow 答案

git update-index --assume-unchanged <file>

然后它将隐藏对已存在文件的其他更改,如果您确实希望每次拉取后文件都存在,则可以使用它。但我建议您仅在真正知道自己在做什么时才使用它。

答案4

扩展 Jake 和 46 的答案:一个非常好的做法是对于包含私人信息的文件使用一致的扩展名,并用于.gitignore始终全局排除具有该扩展名的文件(使用.gitconfig其他地方提到的文件让您的用户始终忽略它)。

这样,您就可以获得例如:

/projectname/mypasswords.exc 

如果您已经*.exc全局排除,那么您就知道它将不会被提交,即使您忘记单独排除该特定文件。

相关内容