2009-11-27 4 views
22

두 가지에 그대로 특정 파일을 유지하면서 동시에 공공 및 민간 가지를 병합하지만 이것에 대한 답을 찾을 수 없습니다 :힘내 : 여기 몇 자식 질문을 읽은

내가 공공 및 민간이를 특정 파일이 갈라 지도록 할 지점.

암호와 로컬 사용자 정의가있는 구성 파일입니다.

브랜치를 두 가지 방법으로 병합 할 수 있기를 원합니다. 개인용에서 공용으로 및 뒤로에서 이러한 특정 파일을 자동으로 병합하고 싶지는 않습니다.

이런 방법으로 설정하는 방법이 있습니까? 나는 자동화 된 솔루션을 찾고 싶다 :) - 그래서 병합은 평소와 같이 할 수있다.


편집 : 날 여기에 대한 유일한 예상치 못한 일이 파일이 후에 만 ​​작업 시작 "보호 병합"고했다

(gitattribute에 대한 조언을 VonC 덕분에) 나를 위해 일한 솔루션의

: 또는 .git가/정보는/속성 (당신이 공유 할 경우 자식과 트랙) 두 가지로 갈라, 다음과 같은 구성은

.gitattributes을 적용 하였다되지 직후 343,210

keepmine

나는 보통 git merge --squash private을 공개 분기 민간에서 병합 이하로 설정되어 선택한 파일에 내부 병합 드라이버 대신이라고 그냥 아무것도 실시하지 않는 명령입니다 명명 된 사용자 정의 병합 관리자이며, . 그런 식으로 비공개 편집은 공개 지사의 git 역사에 들어 가지 않습니다.

.git/구성 :

#public repository 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = <public repo git url> 

#private repository 
#has to set up with git init and populated with the initial commit to branch mybranch 
[remote "private"] 
    push = +: 
    url = /path/to/local/private/repo 
[merge "keepmine"] 
    name = dont_merge_selected_files 
    driver = echo %O %A %B 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 

#private branch settings 
[branch "mybranch"] 
    remote = private 
    merge = refs/heads/mybranch 

답변

14

안전한 측면에서 개인 파일에 git attribute (here for an example 참조)을 추가 할 수 있습니다.

그런 식으로 로컬 정보를 유지하면서 공용 정보를 병합하는 경우 개인 정보를 포함한 파일이 비어있는 상태 (공개 내용 포함)로 유지되도록 스크립트 ("병합 관리자")를 정의 할 수 있습니다. 사설 지부에 병합되었습니다.
해당 파일을 고려하지 않고 병합/리베이스 할 수 있습니다.

+0

이 작품, 감사합니다! – Evgeny

+1

두 분기에서 파일이 변경된 경우에만 작동합니다. keepmine으로 병합이 해결되면 다른 분기의 다음 병합이 재귀에 의해 해결됩니다. – f3r3nc

2

버전 제어에서 암호를 계속 언급 해주십시오 개선 할 수있는 방법이 있는지가 최악의 생각이다. 별도의 파일로 작업하려면 CVS (git이 아니라)가 필요합니다. 다른 많은 현대의 DVCS가 전체 트리와 함께 작동하며, 별도의 파일로 작동하지는 않습니다.

+0

확실하지만 비밀 번호는 여기에 있습니다. – Evgeny

3

이렇게하는 방법 중 하나는 git rebase입니다. master 끝 부분에서 개인적인 변경 사항을 유지하면 master 브랜치 (또는 작업 브랜치를 선택하는 것이 무엇이든간에)에 공개 자료를 커밋하고 업데이트 할 때마다 사설 브랜치를 마스터에 리베이스 할 수 있습니다 .

또 다른 방법은 Git에 템플릿 구성 파일을 보관하는 것입니다 (예 : frobozz.config.template). 작업 디렉토리에서 frobozz.config.template을 (비 버전) frobozz.config에 복사하고 수정하십시오. 로컬 변경 사항을 백업해야하는 경우 작업 디렉토리도 백업해야합니다.

3

이것은 병합 충돌이 발견 된 경우에만 작동하는 것으로 보입니다. 분기 간을 앞뒤로 병합하면 파일을 덮어 씁니다. 내가 뭔가 잘못한 게 아니라면. 물론 windows msysgit git 버전 1.6.5.1.1367에 있습니다.

+0

@yoyodyn 예, 맞습니다. 병합 충돌이있는 파일에서만 작동합니다. – Evgeny

+0

당신은 공공에서 비공개로 단 하나의 방법을 병합하는 것을 고려할 수도 있습니다. 그러나이 경우에 당신은 징계를 유지해야합니다 - 공개 지사/저장소에 공개 기능을 개발하십시오. – Evgeny

+0

실제로 제가 가지고있는 것은 동일한 repo의 세 클론입니다 다른 지리적 위치에서. 저희 사무실은 마스터 지점에서 일하고, 다른 지점은 테스트 지점에서 일하므로 고객은 QA를 수행 할 수 있으며, 세 번째 지점은 현재 실행중인 코드가 위치한 지점입니다. 마스터, 테스트 또는 프로덕션에 따라 매크로에 대해 다른 값을 보유하는 많은 C++ 프로젝트에 Macros.h 파일을 하나 이상 포함합니다. 나는 분기간에 macros.h 파일이 병합되지 않도록하는 방법을 찾으려고 노력 해왔다. – yoyodyn