我无法找到合理的解决方案,因为我认为这是一个非常简单的任务。考虑我的项目中有一些source
目录,其中包含所有源文件。在开发模式下,我更改源文件,Gulp将它们缩小为.min.js
和.min.css
并将它们放入public
目录(澄清一下,我正在构建一个node.js应用程序)。
现在,我有两个分支:master
用于生产,development
用于开发。
master
分支上的.DS_Store
node_modules
source
...
development
分支.DS_Store
node_modules
public/javascript
public/stylesheets
...
我想要获得的行为:1)忽略缩小的文件以进行开发(每次我更改代码时它们都会被组合和缩小),但保留源代码; 2)忽略生产的源文件(因为当我$ git pull
进入生产环境时我不想拥有它们,但是要保持缩小。
由于某些原因,当我从master
来回切换到development
时,git会完全删除一些文件并中断所有内容。例如,它会擦除node_modules
中每个模块的所有内容,强制我每次切换分支时都会$ rm -rf node_modules && npm install
。
非常感谢任何帮助。
此处还描述了这个问题:Using git, how do I ignore a file in one branch but have it committed in another branch?,但没有可行的解决方案。
答案 0 :(得分:4)
我觉得你问的是错误的问题。缩小的脚本是“构建产品”,而不是“源代码”。在我看来,某种“make install”过程应该创建它们,而不是让它们在源代码控制中。但我不在网络空间工作,所以我不知道标准做法是什么。
答案 1 :(得分:3)
一种解决方案是避免在分支之间来回切换(避免"打破一切"部分)
从您当前签出的master
的仓库中,执行(使用git 2.5+)a:
git worktree add ..\dev dev
使用新的git worktree
command,您将获得第二个工作树,链接到您的克隆(仅一次)回购。
请参阅" Multiple working directories with Git?"。
在两个工作树(每个分支一个)中,您可以根据需要维护.gitignore
。