Git에는 기록을 다시 쓰지 않도록 "안전 모드"가 있습니까?


11

Git (및 일반적으로 DVCS)에 익숙하고 기록 변경 변경 사항을 탐색하기 시작하면 저장소가 로컬 인 경우 안전하지만 원격 작업을 시도하고 시도하면 문제가 발생할 수 있습니다 그런 변화를 밀어 넣으십시오.

내가 기대할 수있는 기능은 "안전 모드"를 활성화하여 기본적으로하지 말아야 할 일을하지 못하게하는 기능입니다 ... 그리고 그 의미는 무엇입니까? 나는 이미 기원에 밀어 붙인 것들에 대한 역사-기록 변경을 의미한다. 정확하게 정의 할 수는 없지만 다음과 같은 경우가 포함됩니다.

  • commit --amend HEAD가 이미 푸시되었을 때
  • rebase 로컬이 아닌 지점
  • reset 밀린 지점의

다음은 push실패 할 것 같은 상황의 예입니다 (IIRC에서는 빨리 진행되지 않기 때문에). 우연히 그 중 일부를 만들었고 리모컨에서 지점을 다시 만들어야했습니다. 그리고 나는 아무도 내가 다시 쓴 이력을 뽑을 수 없을 정도로 빨리이 일을 빨리 해냈다.

이러한 유형의 변경을 식별하고 필요에 따라 사용자가 변경하지 못하게 할 수 있다고 생각합니다. 그에 대한 옵션이 있습니까?

그렇지 않다면 그것을 만들려고하는 것이 가치가 있다고 생각합니까? 그러한 "위험한 변화"를 식별하는 방법을 정확하게 정의하려고하십니까?


잘못된 변경을 저지르는 것이 다른 프로그래머에게 영향을 미치는 작업 환경에서는 이러한 조치가 제대로 작동하지 않는 한 이러한 조치를 수행하는 것을 꺼려 할 것입니다. 그래도 나중에 문제가 지속되지 않는지 확인해야합니다. 몇 년 전에 필자가 컴파일하지 않은 소스를 커밋 할 자격이없는 많은 프로그래머들로 구성된 팀에 있다고 상상해보십시오 ! 나는 3 개월 후에 그를 죽이고 싶었다.
Neil

원격 시스템의 후크에서이를 감지 한 후 변경 사항을 거부 할 수있는 것이 합리적입니다.
Andrew T Finnell


질문이 없습니다. 기본 모드는 안전합니다. 을 지정하지 않으면 푸시 할 수 없습니다 --force.
Šimon Tóth

나도 이와 같은 것을보고 싶다. 기본적으로 나는 명령 줄을 감싸고 커밋, 풀, 푸시, 간단한 것들 만 노출 시켜서 git을 배우는 사람들에게 더 안전한 버전을 제공하고 싶습니다. 이 페이지에 아무것도 전체 자식에게 밖으로 강제 : git-scm.com/book/en/Git-Tools-Rewriting-History 망할 놈에 대해 생각하는 로컬 및 원격 REPO있는을위한 다른 도구보다 배우기 위해 좀 더 열심히 이미 -롤백 대신 rebase가 걱정되는 것은 무섭습니다.
Chris Moschini

답변:


5

이것은 Git History Rewrite 방지 또는 잡기 전략 과 같은 질문이 아니라면 매우 밀접하게 보입니다.

요약하면 활성화 할 수 있습니다

git config --system receive.denyNonFastforwards true

git config --system receive.denyDeletes true

또는 다시 수신이라고 판단한 사항을 거부하려면 게시물 수신 후크를 작성하십시오.


1
나는 denyNonFastforwards기본값 (?) 이라고 생각 하지만 denyDeletes그렇지 않습니다. 이 두 가지가 유용하지만, commit --amendHEAD가 이미 푸시 되었기 때문에 푸시 할 수없는 경우 수행하지 못하게하는 클라이언트 측 솔루션을 상상 하고 있습니다.
코스

다시 말해 : 원격 일관성을 유지할 수있는 메커니즘 외에도 복제본을 원격과 "일관된"상태로 유지할 수있는 기능을 원합니다.
코스

@Kos 당신은 또한 로컬 후크를 만들 수 있습니다
Andrew T

설정하는 방법이 denyNonFastfowardstrue마스터 분기에 단지는? 토픽 브랜치를 재기 반화하고 강제 추진할 수 있기를 바랍니다.
nnyby

2

그것은 git의 철학의 일부이기 때문에 당신에게 완전한 힘을주고 당신이 원하는 방식으로 그 힘을 관리 할 수 ​​있기 때문입니다.

만약 당신이이 철학을 고수하지 않는다면, 머큐리얼로 바꾸는 것은 역사를 다시 쓸 수는 있지만 제한적이거나 명확하고 꺼리는 방식으로 생각하는 것이 좋지 않다고 생각할 수 있습니다.


2
나는 실수를한다. 위험한 일을 할 때마다 명시 적으로 확인해야하는 메커니즘은 "내 힘을 원하는 방식으로 관리"하는 데 적합한 것으로 보입니다. :-) (또한 Git은 이미 그런 경우도 있습니다.)
Kos

2

AFAIK, git이 이러한 문제를 해결하는 방법은 그러한 작업을 요청할 때마다 로컬로 수행하지만 수행중인 작업에 바람직하지 않은 결과가 발생할 수 있음을 알려주는 것입니다. 이 시점에서 아직 아무것도 푸시하지 않았으므로 로컬 저장소를 검토하고 푸시하기 전에 위험한 변경을 취소 할 수 있습니다. git이 말한 것에주의를 기울여야하며 이러한 오류를 복구 할 때주의하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.