我想将我的一些作品上传到我的 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.php
Git 永远不会触及实际情况。
此外,如果您打算展示您的代码,您需要预料到有人会尝试以某种方式获取该代码并在他们自己的系统上实现它。请记住,我们不是您,如果您的存储库中没有示例配置文件,人们将无法真正理解如何自己实现代码。他们甚至可能认为您不够称职,因为您没有提供基本的配置示例。
答案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
全局排除,那么您就知道它将不会被提交,即使您忘记单独排除该特定文件。