2008-12-23 4 views
2

내 프로젝트에서 사용한 분산 개정 관리 시스템은 바자뿐입니다. 나는 체크 아웃을하는 방법을 제외하고는 자식과 수은에 관해 많이 모른다. 내가 바자를 좋아하는 이유는 automv 플러그인입니다. 내가 명령했을 때 파일을 수동으로 (커맨드 라인/IDE 등에서) 이동/삭제했을 때를 감지하고, 내가 서두를 때 많이 사용하는 경향이있다. 그러나 바자회는 정말로 느리고 나는 git으로 이사 할 생각이다. 자식은이 기능과 비슷한 것을 가지고 있습니까?git에는 bazaar automv 플러그인에 해당하는 것이 있습니까?

+1

bzr의 automv 플러그인은 이름이 바뀐 파일의 자동 검색을위한 git 알고리즘의 영향을 크게 받았다고 생각합니다. :-) – bialix

답변

8

Git이 이동/이름 변경 상황에서 작동하는 방식은 매우 다릅니다. Git은 오직 내용만을 추적하므로, 파일 X는 SHA1 해시가 abc123...이고, 다음 커밋시 파일 Y는 동일한 해시 인 abc123...을 가졌다. 따라서 Git 도구는 히스토리를 보거나 그 시점에서 파일 X가 그 시점에서 파일 이름 Y로 이름이 바뀌어야한다는 결론을 내립니다.

이런 식으로 Git은 커밋 할 때 지식을 갖지 않고 한 커밋에서 다음 커밋으로 이동하는 동작을 재구성합니다. 이벤트 파일을 파일의 이름을 바꿀 때 상황을 감지 할 수 있습니다 (물론 SHA1 해시 비교하여이를 수행하지 않지만 커밋에서 변경된 파일 간의 텍스트 비교를 수행하여).

+0

사소한 변경 사항 (예 : C# 파일의 네임 스페이스 선언)이있을 경우 무언가가 움직 였다는 것을 짐작할만큼 충분히 똑똑할까요? 내 자신을 확인 하겠지만,이 노트북에서는 할 수 없습니다. ... –

+0

@ 존 스키켓 : 예, 반영하기 위해 제 답변이 업데이트되었습니다. –

+0

그래, 그 자식과 아름답게 작동합니다. SVN이 자동으로 이러한 것을 인식 할 수 없기 때문에 나는 SVN에 완전히 짜증을냅니다. –

2

당신은 git add --all을 찾고 될 수 있습니다

업데이트는 이미 자식을 파일에 대한 (동일 --update) 을 알고 .gitignore 메커니즘에 의해 무시되지 않는 모든 비 추적 파일을 추가 할 수 있습니다. 그냥 정보

(강조 광산.)

1

는 바자 움직임을 알고있다. SVN, 힘내, HG 버전으로 사본 만 알고 삭제할 수 있습니다. 나는 different라고 생각합니다. 그러나 git이 automv를 아주 잘 처리하기 전에 언급했듯이 (나는 들었을 때까지) 아주 영리해서 움직 인 후에는 매우 빠르게 커밋합니다. 나는 egit이 클래스 이름을 변경 한 후에 자동 커밋을한다고 들었다.

관련 문제