Git:在生产分支中忽略源代码,在开发中忽略压缩文件

8
我认为这是一个非常简单的任务,但我找不到一个合理的解决方案。假设我在项目中有一个名为“source”的目录,其中包含所有源文件。在开发模式下,我更改源文件,Gulp会将它们压缩成 .min.js.min.css,并将它们放入public目录中(澄清一下,我正在构建一个node.js应用程序)。
现在,我有两个分支:master 用于生产环境,development用于开发。

master分支上的.gitignore文件

.DS_Store
node_modules
source
...

开发分支下的.gitignore文件

.DS_Store
node_modules
public/javascript
public/stylesheets
...

我想获得的行为是:1)在开发过程中忽略minified文件(它们每次更改代码时都会被组合和缩小),但保留源文件;2)在生产环境中忽略源文件(因为我不希望当我将其$ git pull到生产环境时有这些源文件),但保留被缩小的文件。

由于某种原因,当我在masterdevelopment之间切换时,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?,但没有工作解决方案。


1
哦,小安托什卡...谁教你这么做事的?走到本地聊天室,我们来谈谈你的错误。 - Lazy Badger
@LazyBadger 没有人教过,Sashka,我正在自己努力和挣扎中,该怎么做才是正确的! - Anton Egorov
我恐怕没有简单的解决方案。也许你可以编写一些脚本来自动化这些过程。 - gdlmx
3
对我来说,你似乎在问错了问题。这些被压缩的脚本是“构建产品”,而不是“源代码”。我认为应该通过某种“安装程序”过程创建它们,而不是将它们放在源代码控制中。但我没有在web领域工作过,所以我不知道标准做法是什么。 - Mort
@Mort 看起来这是目前为止最明智的答案。据我所见,应该有一个development分支,所有开发都在这里进行,还应该有一个production分支,即开发过程的“精华”,应该按原样部署。然而,最好的方法似乎是将此production分支作为代码的最后一个稳定版本,在推送到服务器执行并进行此make install编译,可能作为后合并钩子。 - Anton Egorov
@Mort,你能把它发布为答案吗? :) - Anton Egorov
2个回答

4

我感觉你问的问题不太对。这些被压缩过的脚本是“构建产物”,而不是“源代码”。在我看来,应该有一种“make install”流程来创建它们,而不是将它们保存在源代码控制中。但是,我不在web领域工作,所以不知道标准做法是什么。


3
一种解决方案是避免在分支之间来回切换(避免“打破一切”的部分)。
从您当前检出的 repo 中 master 分支,使用 git 2.5+,执行以下操作:
git worktree add ..\dev dev

使用新的git worktree命令, 您将获得第二个工作树,与您克隆(仅一次)的repo链接。
请参见“使用Git进行多个工作目录?”。

在两个工作树中(每个分支一个),您可以根据需要维护您的.gitignore


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接