我有我的网站/ cms在git中跟踪和它工作得很好,除了我的.htaccess文件。该文件需要根据我在哪个服务器上运行代码(本地/测试/实时)而大不相同。因此,现在我已经完全保留了.htaccess的完整版(它位于我的.gitignore文件中)。但偶尔它会丢失,无论如何它都是网站的一部分,我希望它能够保持跟踪,但我不希望它被推送到远程存储库,因为它可能会覆盖其他服务器的正确配置。有什么办法让git保持一个文件的跟踪,但只有本地? (或任何其他方式来解决这个问题?)git版本控制文件在存储库没有推/拉
回答
你可以用Git的sparse checkout功能来做到这一点。在你想有一个特殊的,未追踪.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很乐意跟踪这个文件并将其保存在存储库中,但在具有上述稀疏结帐配置的计算机上,Git将忽略该工作目录中的本地.htaccess
文件,即使它与存储库中的文件不同。
保持你的.htaccess
在一个完全独立的Git仓库,并在你的代码是在目录符号链接它(并保持它.gitignore
倒是在原来的仓库。)
您可能有多个分支,每个服务器一个分支,以便每个分支都有自己版本的服务器特定配置文件。然后,当您在主分支中进行更改时,其他分支将与其合并并获取最新更改 - 但他们会保留自己的配置。如果配置文件发生了变化,那么就需要手动合并,否则这可以通过脚本甚至githooks来实现。
听起来像.htaccess文件的内容是特定于部署的,因此不是代码的一部分。换句话说,这些文件可以由部署脚本生成以适应每个服务器,而不是保存在git中,然后每次提交时都必须覆盖更改。
如果这是一个安全问题,答案将是“否”,因为如果git跟踪文件的历史记录,克隆该存储库的每个人都将获得完整的历史记录。但是,如果您可以控制所有位置,只需要一种方式来跟踪它,但是在其他位置以避免检查它,也许git smudge和git clean filters可能会为您做些事情。它们允许您在检出并提交时编辑文件的内容。我不确定这是否合适,但我试图想出一个可行的解决方案。
或者,使用替代名称(即不是“.htaccess”)跟踪文件,并且在适用的情况下,只有在适用的情况下,创建名为.htaccess的符号链接才能跟踪名称。
- 1. Git版本分别控制版本库中的文件
- 2. Git拉,但从来没有推文件
- 3. Git版本控制 - 存储库上的视图?
- 4. 如何将Git存储库的版本与另一个版本的Git存储库链接Git存储库
- 5. 进度条没有水银版本控制显示推或拉
- 6. git:忽略*版本控制的文件
- 7. git推错版本库
- 8. 从远程服务器复制没有修订版本(没有.git和.gitingore)的git存储库
- 9. git存储库的过滤版本
- 10. Git中的私有存储库 - 没有推送到Master分支
- 11. 使用egit从中央git存储库推入/拉出后没有树冲突
- 12. 拉所有的git存储库分支
- 13. 在git仓库中有效存储二进制文件
- 14. 有没有人制作过内存中的GIT存储库?
- 15. 在Git中推送存储库的子文件夹?
- 16. 如何在git存储库中获取旧版本文件的副本?
- 17. 推送到没有SSH密钥的git存储库?
- 18. 下载最新版本的特定GIT分支+没有本地存储库
- 19. git复制存储库的特定版本
- 20. 限制Git推/拉
- 21. 开始Git版本控制
- 22. Informatica&Git:版本控制
- 23. 没有推送到存储库的拖拉码头图像
- 24. 解压缩OpenOffice文件以更好地存储版本控制
- 25. 没有裸存储库的Git tfs
- 26. 如何在系统启动时拉取最新版本的git存储库
- 27. 通过git将所有文件复制到中央存储库
- 28. 一个版本化的二进制文件存储库
- 29. 从svn存储库中的以前版本复制文件
- 30. 更新现有项目中的新git存储库版本
但是,这并不会让Git跟踪文件,这是OP所需的一部分。 – Amber 2011-01-09 07:25:56