2016-01-22 39 views
0

我记录了无数个小时,试图解决此问题。我发现了许多类似的问题,但是,还没有找到我能够理解的解决问题的答案。这里是我的问题,我希望你能帮助:将某些文件(不是提交)从一个分支合并到另一个分支

我有一个项目,有一个部署分支(只有脚本和它的配置文件),我推送给github,所以我的客户可以拉最新版本的代码。我有一个开发分支,它具有相同的2个文件,脚本和配置文件,以及许多其他文件(有时数百个,其中一些真的是50到200 MB)。我们称这些分支为'项目'和'项目开发'。开发分支中的文件在编码过程中被填充,添加和提交。

我在项目分支的脚本目录中有一个.gitignore,忽略了所有放置它自己和上面列出的文件。

的.gitignore在我的剧本导演:

* 
!.gitignore 
!/*.pl 
!/*.conf 

所以,当我不编码,做我的最后承诺项目的开发,我这样做:

git的结帐项目

git merge project-dev

而git将project-dev中的每个文件合并到项目中。别急,我的.gitignore文件诠释他的脚本目录......没问题,一个合并的首要任务删除的.gitignore文件:(

delete mode 100644 scripts/.gitignore 

然后将所有其他文件被添加... :(

create mode 100644 scripts/0.0.0.0-nets.txt 
create mode 100644 scripts/1453134549-all-exported-networks.csv 
create mode 100644 scripts/1453392277-all-hosts.csv 
create mode 100644 scripts/1453392277-all-networks.csv 
create mode 100644 scripts/1453407843-all-hosts.csv 
create mode 100644 scripts/1453407843-all-networks.csv 
create mode 100644 scripts/1453409789-all-hosts.csv 
create mode 100644 scripts/1453409789-all-networks.csv 
create mode 100644 scripts/1453415039-all-hosts.csv 
create mode 100644 scripts/1453415039-all-networks.csv 
create mode 100644 scripts/1453428006-all-hosts.csv 
create mode 100644 scripts/1453428006-all-networks.csv 
create mode 100644 scripts/1453429183-all-hosts.csv 
create mode 100644 scripts/1453429183-all-networks.csv 
create mode 100644 scripts/1453432643-all-hosts.csv 
create mode 100644 scripts/1453432643-all-networks.csv 
create mode 100644 scripts/1453433494-all-hosts.csv 
create mode 100644 scripts/1453433494-all-networks.csv 
create mode 100644 scripts/1453437439-all-hosts.csv 
. 
. 
. 
create mode 100644 scripts/Report_NETS_20160122_103537.txt 
create mode 100644 scripts/Report_NETS_20160122_103537.txt 
create mode 100644 scripts/Report_NETS_20160122_105113.txt 
create mode 100644 scripts/Report_NETS_20160122_105113.txt 
create mode 100644 scripts/Report_NETS_20160122_153820.txt 
create mode 100644 scripts/Report_NETS_20160122_153820.txt 
create mode 100644 scripts/Report_NETS_20160122_155209.txt 
create mode 100644 scripts/Report_NETS_20160122_155209.txt 
create mode 100644 scripts/all-hosts.dat 
create mode 100644 scripts/all-nets.dat 
create mode 100644 scripts/exported-networks-headers.csv 
create mode 100644 scripts/fixed.csv 
create mode 100644 scripts/hosts.csv 
create mode 100644 scripts/network-report-headers-some-commented.txt 
create mode 100644 scripts/network-report-headers.txt 
create mode 100644 scripts/networks-headers.csv 
create mode 100644 scripts/networks.csv 
create mode 100644 scripts/refactored.txt 
create mode 100644 scripts/test-host.csv 
create mode 100644 scripts/test-network.csv 

我真的只有两个文件,一个脚本及其配置在合并期间过来(可能不在上面的输出中,因为它们处于一个非常长的文件列表中...... )不,没有可以单独列出这些文件的“提交”,当我更新脚本并运行它时,它创建了一堆文件,所有这些文件都在我决定创建时提交的文件中国王OK。

我想/需要-dev分支中的所有这些工作文件,但是,不能在投影面向客户的分支中拥有它们。

有没有办法?或者,如果我在文件和提交之间没有一对一的关系,我是否运气不好?

在此先感谢!

ACC ...

+0

你可以开始一个新的分支,删除你不想要的所有文件,然后将它合并到你想要的位置。如果你不喜欢这种解决方案,可能需要黑暗的魔术贴(特别是“滤镜分支”)。 – PyRulez

+0

是的,我看到一个线程在某处(我的脑袋开始受伤......双关语意)说过滤分支和bfg。过滤分支的东西看起来更像是提交过滤,但是,我可能会误解它。 bfg看起来像一个更容易的选项,但是,在有限的一面仍然有点儿。看起来,git在提交版本方面做得很好,但不是那么多的文件。 – user3220745

+0

是的,那么你可能想要跟我的第一个建议。 – PyRulez

回答

1

你有没有尝试过这样的:

git的结帐 '项目'

git的结帐 '项目开发' script_file_name

git的结帐 '项目开发' config_file_name

它应该从您的'project-dev'分支中将这2个文件放到您的项目分支中。

+0

这不会复制他们的历史。 – PyRulez

+0

不,我没有。我没有考虑过,因为我一直在沿着合并道路行驶。但是,我想没有什么能够阻止我从开发分支中检出需要的文件到部署分支中,然后提交它们。我徘徊了这种方法的利弊是什么......也就是说,如果不合并,我会失去什么......我将不得不为此而感到......谢谢,我会回复你的...... – user3220745

+0

这是'检查'和点(我可以)。我尝试了一个git merge --no-commit --no-ff,然后重置所有我不想要的'新'文件(甚至写了一个脚本来完成),然后提交并推送到github。猜猜看,推送未能推送我重置并没有提交的大文件(来自开发分支的文件)。 @Ninos的方法如上所述正是我所需要的:将最新的脚本合并到部署分支中,并将其推到github上。也许有一天有人会发明一个管理软件文件的SCM,而不是发明人的梦想。。 – user3220745

相关问题