2010-01-18 2 views
37

git 히스토리 재 작성 기능이 좋긴하지만, 히스토리가 다시 작성되지 않도록하는 방법은 무엇입니까?git 히스토리 재 작성 방지 또는 포착 전략

프로그래머가 자신의 컴퓨터에서 수행하는 작업에 신경 쓰지는 않지만 버전이 기록을 변경하는 서버에 푸시되지 않도록해야합니다.

즉 과거의 특정 버전이 실제로 해당 버전 이었음을 보장해야합니다. 따라서 누군가가 역사를 통해 파일을 영구히 제거하거나 모든 기록을 통해 파일을 영구적으로 변경하는 것을 방지하는 것이 포함됩니다.

답변

38

실행할 수있는 경우 서버에서

git config --system receive.denyNonFastforwards true 

에 밀려 역사의 사건을 재 작성의주의를 기울여야한다 서버 말했다.
그러나 이는 특정 파일 또는 파일 그룹이 아닌 모든 저장소에 대한 것입니다.

git config :

receive.denyNonFastForwards

당신이 리베이스 경우 이미 밀려 다음이 포함되지 않은 원격 지사에 커밋 밀어하려고 그렇지 않으면 다시 밀어 시도하거나 한 것을 커밋 원격 브랜치가 현재 가리키는 커밋은 거부됩니다. 이것은 일반적으로 좋은 정책입니다. 리베이스의 경우, 사용자가 수행중인 작업을 알고 있으며 push 명령에 -f 플래그로 원격 브랜치를 강제로 업데이트 할 수 있습니다.

이렇게 할 수있는 다른 방법은 서버 측 수신 후크를 사용하는 것입니다. 이에 대해서는 약간 다룰 것입니다. 이러한 접근 방식을 사용하면 특정 하위 사용자에 대한 비속 절식을 거부하는 것과 같은 더 복잡한 작업을 수행 할 수 있습니다.


ebneter으로 (일관성 저장소의 중요성을 알고있다 - SVN to Git migrations에 대한 답을 [질문은 지금 삭제, 10K + 사용자는]) 설명 :

당신은 할 수 있습니다 또한 receive.denyDeletes true을 추가하면 다른 사람이 지점을 삭제 한 다음 다시 작성한 지점을 새 분기로 밀어 효과적으로 기록을 다시 쓸 수 있기 때문입니다.

git config : 사용자가 지점을 삭제 한 다음 새 참조 위로 다시 밀어위한 denyNonFastForwards 정책에 대한 해결 방법 중

하나입니다. 망할 놈의 최신 버전 (버전 1.6.1로 시작), true로 receive.denyDeletes을 설정할 수 있습니다

$ git config --system receive.denyDeletes true

이 전반적으로 푸시를 통해 지점 및 태그 삭제를 거부 - 어떤 사용자가이를 할 수 없다. 원격 분기를 제거하려면 서버에서 수동으로 ref 파일을 제거해야합니다. ACL을 통해 사용자별로이 작업을 수행하는 더욱 흥미로운 방법이 있습니다.이 장의 마지막 부분에서 배우게됩니다.당신이 receive.denyNonFastForwards에 대한 새로운 충분한 자식을 사용하지 않는 경우

+4

참고 : Git1.6 이상 만 ... – VonC

+6

receive.denyDeletes true를 추가하는 것이 좋습니다. 그렇지 않으면 누군가 지점을 삭제 한 다음 재 작성된 지점을 새로운 분기로 밀어 효과적으로 기록을 다시 쓸 수 있기 때문입니다. – ebneter

+0

@ebneter : 훌륭한 팁. 나는 그것을 포함하도록 나의 대답을 편집했다. 고맙습니다. – VonC

3

, 당신은 (다른 사람의 사이에서) {pre,post}-receive는 등 특정 지점과의 좀 더 세분화 할 수 있습니다 서버에 후크를 통해 정책을 적용 할 수 있습니다. (한 금지하는 역사를 재 작성 포함)

좋은 예는이 저장소를 모두 관리하는 GNOME 프로젝트에 의해 사용됩니다

https://git.gnome.org/browse/sysadmin-bin/tree/git

내가 pre-receive-check-policy에서 특히보고 싶은데.

0

Git 히스토리 재 작성을 완벽하게 비활성화하고 싶지는 않지만이 모든 변경 사항에 대한 알림을 받고 몇 년 후에 복구 할 수있는 경우 Gerrit와 같은 엔터프라이즈 Git 서버로 확장하여 이력을 감지합니다 재 작성 및 브랜치 삭제는 특별 심판 아래에 백업하여 필요에 따라 복구 할 수 있으며 가비지 수집에 의해 제거되지 않습니다. Gerrit 관리자는 법적인 이유로 필요한 경우 선택한 커밋을 제거 할 수 있습니다.