存储库上的git版本控制文件,无需推/拉

存储库上的git版本控制文件,无需推/拉,git,Git,我在git中跟踪了我的网站/cms,除了我的.htaccess文件外,它运行得相当好。根据运行代码的服务器(本地/测试/实时),文件需要有很大的不同。因此,现在我将.htaccess完全保留在git之外(它在我的.gitignore文件中)。但有时它会丢失,而且在任何情况下它都是站点的一部分,我希望它保持跟踪,但我不希望它被推送到远程存储库,在那里它可能会覆盖其他服务器的正确配置。有没有办法让git只在本地跟踪文件?(或任何其他解决问题的方法?将您的.htaccess保存在一个完全独立的git存

我在git中跟踪了我的网站/cms,除了我的.htaccess文件外,它运行得相当好。根据运行代码的服务器(本地/测试/实时),文件需要有很大的不同。因此,现在我将.htaccess完全保留在git之外(它在我的.gitignore文件中)。但有时它会丢失,而且在任何情况下它都是站点的一部分,我希望它保持跟踪,但我不希望它被推送到远程存储库,在那里它可能会覆盖其他服务器的正确配置。有没有办法让git只在本地跟踪文件?(或任何其他解决问题的方法?

将您的
.htaccess
保存在一个完全独立的git存储库中,并将其符号链接到代码所在的目录中。(并将其
.gitignore
'd保存在原始存储库中。)

您可以使用Git的功能实现这一点。在需要特殊、未跟踪的
.htaccess
文件的repo中运行以下命令:

git config core.sparsecheckout true
echo '*' >.git/info/sparse-checkout
echo '!.htaccess' >>.git/info/sparse-checkout
git read-tree --reset -u HEAD
这将首先删除现有的
.htaccess
文件。但现在,从Git的角度来看,它被忽略了,所以您可以将特定于机器的一个放在那里,Git不会为此而困扰您


然后,您可以从其他存储库(比如本地存储库)添加并管理
.htaccess
文件。Git很乐意跟踪此文件并将其保存在存储库中,但在具有上述稀疏签出配置的机器上,Git将忽略该工作目录中的本地
.htaccess
文件,即使它与存储库中的文件不同。

您可以有多个分支,每个服务器一个分支,这样每个分支都有自己版本的特定于服务器的配置文件。然后,当您在主分支中进行更改时,其他分支将与之合并并获得最新的更改,但它们将保留自己的配置。如果更改了配置文件,则需要手动合并,否则这可以通过脚本甚至githooks实现自动化。

听起来.htaccess文件的内容是特定于部署的,因此不是代码的一部分。换句话说,这些文件可以通过部署脚本生成以适应每台服务器,而不是保存在git中,然后在每次提交其中一个文件时都必须覆盖更改。

如果是安全问题,答案将是“否”,因为如果git跟踪文件的历史,克隆该存储库的每个人都将获得完整的历史记录。但是,如果您可以控制所有位置,并且只想找到一种跟踪它的方法,但是在其他位置为了避免检出它,那么git smudge和git clean过滤器可能会对您有所帮助。它们允许您在签出并提交文件时编辑文件内容。我不确定这是否合适,但我正试图找到一个可行的解决方案


或者,使用另一个名称(即非“.htaccess”)跟踪该文件,并且在适用的情况下,仅在适用的情况下,创建一个名为.htaccess的符号链接,指向被跟踪的名称。

但是,这不会使Git跟踪该文件,而这是OP想要的一部分。