Edw*_*ell 7 git version-control ignore gitignore
我工作的几乎所有项目都有某种"冻结内容",这些内容应该在克隆时总是出现,但很少被更改(参见下面的示例).我尝试过使用git的不同方法,但它们都容易出错:人们经常会意外地提交更改.
这是一个微妙的案例:文件/文件夹必须是版本化的,但绝大多数的更改都不应该被推送.
环顾四周我有几个选择:
git update-index --assume-unchanged <file>: 问题 - 这似乎是一个本地设置,所以这只解决了给定机器上的问题.新的克隆容易忘记并且仍然意外地进行更改.git update-index --skip-worktree <file>:问题 - 看起来有同样的问题,因为我认为索引的更改不会被传播.git rm --cached <file>:问题 - 根本不是一个解决方案,因为这推动了每个人的副本!echo <file> >> .gitignore:问题 - 不是真正的解决方案,因为这只控制是否将对象添加到repo.这个问题的可接受答案不需要每个新开发人员采取特殊行动.
为什么?因为这正是上述解决方案的问题,根据我的经验,这导致"有人再次提交该文件"的情况.
搜索很容易出现很多问题.我们需要一个最终答案!
例:
这是我正在处理ATM的情况.我的项目是一个嵌入wiki软件的网站(我没写过).wiki组件需要一个非平凡的文件夹结构,它的使用方式与数据库相似(可能应该是一个).它需要找到已经存在的文件夹和文件.一段时间后,这些文件变大了 - 我们不想跟踪这些变化!这个文件夹结构还包含一些配置(我知道).如果我可以在存储库中包含裸副本,并且以某种方式(几乎)从不跟踪其更改,那将是完美的.
目前尚不清楚您所说的文件类型。
对于配置文件,我始终推荐以下方法:
config.sample.ini.config.ini.config.sample.ini必须将该文件复制到config.ini和 并进行自定义。在自述文件、wiki 或任何地方记录此过程。这确保了示例文件可以轻松更新。它确保配置文件不被提交。如果做错了,它很快就会失败。而且实现起来相对简单。
config.ini从已承诺变为已忽略config.ini和已承诺的最快方法config.sample.ini可能是执行以下操作:
git mv config.ini config.sample.ini
echo config.ini >> .gitignore
git commit -a -m "Replace config file with sample config file"
Run Code Online (Sandbox Code Playgroud)
更新:
你的维基示例很有趣。
你说得对,一棵很深的.sample文件树很难管理,但你可以使用 zip 文件或 tarball 获得相同的效果:
wiki.zip.path/to/wiki-root.unzip -d path/to/wiki-root”添加到您的文档中。现在这是您的安装/部署过程的一部分。现在,您可以根据需要更新 zip 文件并提交这些更改,同时忽略对提取的文件的更改。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |