2017-01-18 2 views
1

CVS와 GIT 모두에서 프로젝트를 추적하고 있습니다. CVS가 .git 폴더를 무시하면 GIT는 모든 CVS 하위 폴더를 무시합니다. GIT 저장소가 git cvsimport으로 생성되었으므로 둘 다 동일한 기록을 사용합니다. 제외 꽤 잘병렬로 키워드 확장을 처리하는 방법 GIT + CVS 프로젝트

작품 :

일부 파일은 cvs update에 확장 얻을 CVS 스타일의 키워드를 가지고있다. 그런 다음 GIT가 변경 사항으로 표시됩니다.

키워드 확장을 삭제하면 (cvsimport는 -k으로 끝났으므로 GIT 저장소에서 확장되지 않음) 더 이상 git에 대한 변경 사항을 표시하지 않고 대신 CVS와 비교할 때 변경 사항으로 표시됩니다.

CVS에서 확장 된 상태로 유지하는 방법이 있습니까? 그러나 GIT에서 변경되지 않은 상태로 확장되지 않는 방법이 있습니까?

내 부분 용액 : 제가

.gitattributes

*.txt filter=ignId 

.git/설정 지정 필터를 설정 .gitattributes 및 .git/구성을 사용

[filter "ignId"] 
    clean = ./ignId.sh %f 
    smudge = cat 

ignId.sh

변경으로
#!/bin/bash 

sed -e "[email protected]\\\$Id:[^\\\$]*@\\\[email protected]" $1 

하고 git diff에서 작동하며 아마도 git commit에 (하나 아직 시도하지 않은), 그러나 git status는 여전히 파일을 보여줍니다.

git status 변경 사항을 무시하려면 어떻게해야합니까?

업데이트 : 는 여기 Why does 'git status' ignore the .gitattributes clean filter?git status는 필터링 된 출력을 표시 할 수 없다는 점을 참조하십시오. git add 다음에 올바른 준비 파일 만 표시됩니다. 그러나 이것을 틀린 것으로 자유롭게 느껴보십시오.

+0

만약 당신이 그들을 자식에게 커밋을 확장? AFAIR "Id"는 파일에서 다른 것이 변경된 경우에만 변경되어야합니다. 경미한 소음은 있지만 치명적이지는 않습니다. – max630

+0

파일 변경 -> git으로 체크인 -> cvs로 체크인 -> 키워드 확장 -> git AGAIN으로 체크인하십시오. 자식은 커밋 된 커밋을 더 많이 가질 것이므로 처음부터 자주 호출됩니다. 거의 모든 파일 변경은 하나가 아닌 2 개의 커밋을 생성합니다. –

답변

0

CVS와 GIT 사이의 메커니즘이 다르기 때문에. cvs update에 의해 확장 된 파일은 이러한 파일이 실제로 변경되었음을 의미합니다. 따라서 git에는 새로운 체크섬이 있습니다. git status을 사용하면 git은 마지막 단계 스테이지 영역의 체크섬과 비교하여 다른 체크섬이있는 파일을 표시합니다.

두 버전 제어 도구를 서로 영향을주지 않으려면 다른 디렉토리에 둘 수 있습니다.

+0

제안 해 주셔서 감사합니다. 나는 두 개의 폴더 접근 방식에서 왔으며 단지 하나만 사용할 가능성을 탐구하고 싶다. 체크섬 정보 : 필터를 적용하여 체크섬이 생성되기 전에 파일을 사전 처리 할 수 ​​있습니다. 이것은 커밋에 적용됩니다. 그것은 상태를 위해 작동하지 않습니다.어쩌면 상태 생성에 연결하는 방법이 있을까요? –

관련 문제