2013-02-08 71 views
0

在使用Javascript进行开发时,作为练习,我们在服务器上上传了缩小的JS,因此我只想在我的主分支中只保留缩小的JS,而在本地(专用)分支上进行更改。有没有一种简单的方法可以将本地分支中的缩小JS合并到Master?将选择性文件从一个分支添加到其他

樱桃选择提交不会工作,因为我不希望从我的私人提交合并所有文件。 This method建议从一个分支中提取特定文件以提交其他文件,我想知道是否有一种设置/替代方法来自动执行此操作,即合并只需要缩小的js文件(* .min.js)?

+0

为什么它在'master'中同时存在未定义或缩小的代码?这听起来像你正在寻找复杂的东西,没有什么好处。 (避免在服务器上有一堆很小的未使用的文件。) – millimoose 2013-02-08 16:48:44

+0

此外,在源代码控制的其他地方有更好的解决方案。您可以在应用程序代码中根据需要缩小JS,也可以使用在部署期间运行的工具(例如['grunt'](http://gruntjs.com/))。 – millimoose 2013-02-08 16:49:30

+0

@millimoose,因为主分支与我不想公开分支的客户共享 – Ani 2013-02-09 11:36:59

回答

1

听起来好像您在文档根目录中有一个远程回购,您正在推送该文件并将其用作您的实时站点的部署机制。我想说,在文档根目录下有一个git repo不是很好的部署方式。 (任何人都可以克隆你的整个回购,包括你的整个提交历史以及可能令人尴尬的未发布的代码。)也许你的设置有所不同,但我会根据你写的内容去做这个假设。

如果您使用post-receive挂钩将master提取到您的文档根目录,但让您的git回购存储在别处,那么您可以无忧虑地存储缩小和非缩小的JS源代码。

将您的git repo移出您的登台服务器上的文档根目录。

.git/hooks/post-receive暂存Web服务器上:

#!/bin/sh 
GIT_WORK_TREE=/path/to/your/docroot git archive master --format tar | tar -x "*.min.js" 

这将导致gitmaster分支的原始副本导出到您选择的目录。它将通过管道tar来完成此操作,您可以使用它来过滤哪些文件需要从哪里出来,哪些不需要。 post-receive是一个shell脚本,所以你可以真的在这里狂放,在部署之后添加后续行来做任何你想要的内务。

所以,上面是我建议你做的。如果您仍想继续并仅保留主分支中的一部分文件,则可以使用您在shell脚本中链接的方法。

假设你的本地分支的名字是local,并希望“部署”到master已经承诺的一切,做一个deploy.sh(并将其添加到.gitignore如果你想):

#!/bin/sh 
git checkout master 
git diff-tree --name-only -r local | grep ".min.js$" > temp_file_list.txt 
git checkout local `sed 'N;s/\n/ /' temp_file_list.txt` 
git commit -m "Selective 'merge' of minified js from my local branch" 

然后你只需每当你想用更改的.min.js文件更新主文件时,运行deploy.sh。如果您使用的是Windows并使本地文件保持为DOS格式,则应在上面的sed命令中输入\r\n而不是\n - 并安装基于bash的命令行git工具。

+0

不是关于使用远程回购作为现场网站。我的要求更多地是在共享某些文件的同时将其他文件保留为本地回收站中的私人文件。我认为你的第二种方法可能会奏效。星期一会试试看,谢谢! – Ani 2013-02-09 12:38:34

相关问题