2016-01-22 110 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

相關問題