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

时间:2011-01-09 07:03:12

标签: git

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

5 个答案:

答案 0 :(得分:2)

您可以使用Git的sparse checkout功能执行此操作。在repo中运行以下命令,您需要一个特殊的,未跟踪的.htaccess文件:

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很乐意跟踪这个文件并将其保存在存储库中,但是在具有上述稀疏checkout配置的机器上,Git将忽略该工作目录中的本地.htaccess文件,甚至如果它与存储库中的内容不同。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以拥有多个分支,每个服务器一个分支,以便每个分支都有自己的服务器特定配置文件版本。然后,当你在master分支中进行更改时,那些其他分支将与它合并并获得最新的更改 - 但是它们将保留自己的配置。如果更改配置文件,则需要手动合并,否则这可以通过脚本甚至githooks自动完成。

答案 4 :(得分:0)

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

或者,使用备用名称(即不是“.htaccess”)跟踪文件,并在适用的情况下,仅在适用的情况下,为跟踪名称创建名为.htaccess的符号链接。