2009-11-04 47 views
2

我爲客戶端X創建了一個rails網站。我現在有一個客戶端Y,他希望網站能夠完成與客戶端X完全相同的功能,但是使用不同的皮膚。Git從一個特定的文件夾合併

我從clientXcode做了一個git分支,並將其稱爲clientYcode。然後,我對視圖進行了所有更改,使其看起來不同,並且lala是具有不同皮膚的同一網站。

現在,我不明白git:我已經在視圖,模型和控制器中對clientXcode做了很多更改;現在我想將這些更改合併到clientYcode中,排除任何視圖更改。由於意見,模型和控制器,每個人都有自己的文件夾中軌,我希望能夠做一些事情,如:

git merge client_x_code 'app/controllers/*', 'app/models/*' 

問題1:這樣的事情可能與混帳?如果是這樣,我該怎麼做?

問題2:分支是製作項目副本的最佳解決方案嗎?

回答

9

好吧,我發現最簡單的解決我的問題......

git checkout clientYcode 
git checkout clientXcode "app/controllers/" 
git checkout clientXcode "app/models/" 

這我想要做什麼!

+0

但是,這只是您工作區中的臨時文件,下次切換分支時,您將不得不重複所有這些。 – ScottJ 2009-11-05 21:01:11

+2

以及我當然然後做一個提交,以保存在我當前的分支 – tybro0103 2009-11-06 19:51:18

+0

這些變化很好!另見http://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/進行完整的寫作! – oae 2013-07-09 10:04:41

2

最簡單的做法是合併一切,除了要保留的目錄內容外。
您可以通過在該目錄中添加合併驅動程序來做到這一點,如How do I tell git to always select my local version for conflicted merges on a specific file?問題的詳細信息。

在合併驅動程序就緒的情況下,Branching在這種情況下是一個很好的解決方案。


提取物:

我們在dirWithCopyMerge目錄中定義一個.gitattributes文件(只定義在合併的意願發生分支:myBranch),我們有一個.git\config文件,它現在包含一個合併驅動。

[merge "keepMine"] 
     name = always keep mine during merge 
     driver = keepMine.sh %O %A %B 
+0

誰是'keepMine.sh',我怎樣才能使它在Windows上工作? – Adaptabi 2013-09-16 14:52:00

+0

@DotNetWise你可以在http://stackoverflow.com/a/930495/6309 – VonC 2013-09-16 15:51:07

+0

中看到'keepMine.sh'的定義和使用(在Windows上)謝謝。只是爲了記錄,它可以簡單地位於'PATH'文件夾中的'keepMine.bat' – Adaptabi 2013-09-16 16:01:22

相關問題