在维护.gitignore文件的同时,保留repo中所有文件的副本



我正在处理一个Laravel repo,它是一个带有标准.gitignore文件的git repo,我对其进行了轻微修改以满足项目需求。

每次,我都会将repo推送到github,生产所需的所有文件都会更新,但被忽略的文件不会。如果我想移动到另一台机器并克隆项目,这会带来一个问题,因为我需要的第一台机器上的一些文件尚未发布这些文件。

理想情况下,我希望维护一个忽略所有文件的repo,但也要维护一个所有内容的repo。

这可能通过git或其他最佳实践实现吗?

唯一不应该放在存储库中的文件是包含敏感信息的配置文件、在不同机器上可能不同的设置(例如路径(或无需操作代码更改即可更改的设置(如页面上显示的项目数(。

这种配置文件(假设其名称为config.txt(的标准做法是创建一个包含默认值(对于密码等敏感信息为空(和注释的文件版本,这些注释解释了可配置参数的可能值及其含义

将副本命名为config.txt.dist并将其放入存储库,同时将config.txt添加到.gitignore中。

当一个人在新机器上签出项目时,他/她会将config.txt.dist复制为config.txt,并在其中填充适当的设置,然后就可以开始了。

程序员必须注意保持本地config.txtconfig.txt.dist同步。一些框架(例如Symfony(提供了从config.txt.dist创建config.txt并在项目准备部署时更新它的工具。

config.txt替换为适合您的项目和构建该项目所使用的语言的名称。

不清楚为什么需要这样做,但它是可以做到的。你可以有两个分支,其中一个分支的文件在.gitignore 中

设置:

git checkout -b all-files
git add --force .                  # --force ignores .gitignore
git commit -m "adding all files"
git push origin all-files

之后,在您对主分支进行更改并希望远程更新所有文件之后:

git checkout all-files
git add --force .                             # only if you have updated ignored files
git commit -m "updating .gitignored files"    # only if you have updated ignored files
git rebase master
git push origin all-files --force

使用此设置,master将只具有不在.gitignore中的文件,并且所有文件都将具有所有文件,而不管.gitignore 如何

如果您想将这些分支分离为两个不同的repo,只需制作一个新的repo、使用git add remote all-files <URL_TO_REMOTE>将其设置为新的远程,并在推送所有文件分支时使用git push all-files master即可。

最新更新