2009-11-04 6 views
2

저는 클라이언트 X 용 레일즈 웹 사이트를 만들었습니다. 클라이언트 X와 똑같지 만 다른 스킨을 가진 웹 사이트를 원하는 클라이언트 Y가 있습니다.특정 폴더에서만 병합합니다.

clientXcode에서 자식 분기를 만들고 clientYcode라고했습니다. 그런 다음보기를 변경하여보기가 달라 지도록하고, 라라 (다른 웹 사이트의 동일한 웹 사이트)를 변경했습니다.

다음은 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

+2

물론 나는 현재 내 지점의 변경 사항을 저장하기 위해 커밋을 수행합니다. – tybro0103

+0

멋집니다! 전체 기사를 보려면 http://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/를 참조하십시오! – oae

2

가장 간단한 조치는 유지하려는 디렉토리의 내용을 제외하고 모든 것을 병합하는 것입니다.
How do I tell git to always select my local version for conflicted merges on a specific file? 질문 세부 사항으로 해당 디렉토리에 병합 드라이버를 추가하면됩니다.

해당 병합 드라이버를 사용하면이 경우 분기가 좋은 솔루션입니다.


추출 :

우리는 dirWithCopyMerge 디렉토리에 정의 된 .gitattributes 파일이이 (병합 의지가 발생하는 지점에서만 정의 : myBranch)을, 그리고 우리가 지금을 포함하는 .git\config 파일이 병합 드라이버.

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

누가'keepMine.sh'이고 누가 그것을 창에서 작동하게 할 수 있습니까? – Adaptabi

+0

@DotNetWise http://stackoverflow.com/a/930495/6309에서'keepMine.sh'가 정의되고 사용 된 것을 볼 수 있습니다. – VonC

+0

고마워요. 단지 기록을 위해서, 간단히'keepMine.bat'이'PATH' 폴더에있을 수 있습니다. – Adaptabi

관련 문제