我想通过将一些作品上传到我的GitHub帐户来展示我的一些作品。但是,有些文件包含密码,例如数据库连接。
有没有一种方法可以使用Git将文件标记为不可提交,使其不能出现在GitHub上?
.gitignore
。AFAIK并没有100%完全证明的方法git
来避免在所有情况下都提交特定文件。尽管这可能被视为一项功能...允许显式命令覆盖通用配置。
我想通过将一些作品上传到我的GitHub帐户来展示我的一些作品。但是,有些文件包含密码,例如数据库连接。
有没有一种方法可以使用Git将文件标记为不可提交,使其不能出现在GitHub上?
.gitignore
。AFAIK并没有100%完全证明的方法git
来避免在所有情况下都提交特定文件。尽管这可能被视为一项功能...允许显式命令覆盖通用配置。
Answers:
有没有一种方法可以使用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绝不会触及实际文件。
另外,如果您打算展示代码,则需要期望有人会尝试采用该代码并以某种方式在自己的系统上实现它。请记住,我们不是您,并且您的仓库中没有示例配置文件,所以人们不会真正理解如何自己实现代码。他们甚至可能会认为您没有能力,因为您没有提供基本的配置示例。
您还可以添加一个预提交钩子来实施完整性检查。.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
匹配,则提交失败。
.gitignore
对于使用Git的任何人,创建现实 是非常普遍的做法,并且通常被理解。但是大多数Git用户并没有真正使用预提交脚本。它需要一些设置方面的知识,并且需要一些真实的原因,为什么这样的方法比简单地使用.gitignore
文件更好。但这对于某些更复杂的情况非常有用,但是当您真正知道需要使用它时,绝对可以使用该概念。
@JakeGould说什么。在某些情况下,您还可以使用特殊文件位,例如skip-worktree
或assume-unchanged
可以通过以下方式设置;有关两者之间的区别,请参见以下堆栈溢出答案:
git update-index --assume-unchanged <file>
然后,这将隐藏对现有文件的其他更改;如果您确实希望在每次拉动之后将文件保存在其中,则可以使用该更改。但我建议您仅在真正知道自己在做什么的情况下使用它。