전원이 꺼지면 Git은 얼마나 강력합니까?


24

어느 날 나는 힘내를 사용하고 있었고 (나는 여전히 그것을 사용하고 있습니다) 나는 커밋하는 동안 전기가 끊어졌습니다.

내가 (실제로 전기) 돌아 왔을 때 자식 저장소가 손상되었습니다. 정확한 이름은 기억 나지 않지만 "유효하지 않은 심판"또는 이와 유사한 이름입니다.

작업 도중에 커밋이 중단되었다고 추측하기 쉽습니다 (인덱스를 자동으로 추가하는 IntelliJ를 통해 커밋했습니다). 실제로 'commit'이 같은 이름을 가진 DBMS 작업만큼 ACID가 아니라고 추측하기도 쉽습니다.

Q : 리포터 링 작업이 원 자성을 존중할 수있는 방법이 있습니까? 즉, 전기가 다시 끊어지고 커밋하는 경우 파일 시스템이 손상된 상태가 아니길 바랍니다.


10
UPS를 사십니까? .....
Robert Harvey

매일 백업합니까?
ratchet freak

그것은 문제를 해결하지 못합니다-git repo가 ​​서버에 있고 로컬 repo에서 I PUSH를 상상하고 서버에서 커밋을 동화하는 동안 에너지가 다시 떨어집니다. 같은 문제이지만 이번에는 인간의 존재가 없습니다.
Luis Masuelli

답변:


10

Git 커밋이 완벽하게 시간이 초과 된 정전에서도 살아남을 수있는 방법이 있는지 모르겠지만 저장소를 수정할 수 있습니다.

Git 객체는 변경 불가능하므로 모든 이전 커밋은 여전히 ​​유효합니다. 이 답변 에 따르면 해시 .git/refs/heads/<branch-name>를 변경하여 작업중 인 분기의 헤드를 이전 커밋으로 변경할 수 있습니다 (에서 볼 수 있음 .git/logs/HEAD).

이 답변에 대한 의견은이 방법은 "아직 저장소를 깨진 상태로 유지하지만 복구 할 수 있습니다"라고 말합니다. 나는 이것을 테스트하지 않았다 (상황을 복제하는 방법을 모른다).하지만 복구를 통해 완료 된 것으로 가정 git gc하면 손상된 커밋이 삭제됩니다.


6
"상황을 복제하는 방법을 모른다"플러그를 당기시겠습니까? ;)
yannis

3
@YannisRizos 어쩌면 이것이 SVN 이었더라도 Git 커밋은 인간 타이밍 능력으로는 너무 빠릅니다 ...
Idan Arye

5
힘내는 오픈 소스입니까? 따라서 문제를 재현하려면 코드를 작성하고 데이터를 디스크에 저장하기 전에 중단 점을 설정 한 다음 플러그 당기십시오.
존 손더스

10

Git의 스토리지 시스템은 트랜잭션이 아니므로 하드웨어 문제로 인해 일관되지 않은 상태가 될 수 있습니다. 반면에 Git은 정말 빠르기 때문에“정전”유형의 문제에 부딪히기 위해서는 운이 좋지 않을 것입니다 (디스크의 체계적인 문제는 다른 것입니다). 속도는 부분적으로 트랜잭션이 아니라는 사실에서 비롯됩니다. 트랜잭션은 데이터를 기록한 디스크에서 확인을 다시 기다려야하기 때문에 실제로 매우 비쌉니다. (데이터베이스는이 비용을 감추려고 모든 종류의 작업을 수행하지만 궁극적으로는 여전히 가격을 지불합니다. 경쟁사 DVCS 중 일부 트랜잭션 방식이므로 git과 동일한 하드웨어에서는 상당히 느립니다.)

최악의 경우 (총체적으로 발생한 치명적인 디스크 오류) DVCS가 복구 할 수있는 유일한 방법은 배포 된 사실을 사용하는 것입니다.. 최근까지 변경 사항을 다른 시스템으로 푸시하여 다른 여러 호스트와 공유 한 경우 복구는 이러한 다른 장소 중 하나를 아티팩트 소스로 사용하는 것입니다. 일시적인 경우에도). 그런 식으로 흥미로운 지점의 역사를 되찾아 매우 빠르게 다시 일할 수 있습니다. 한 번에 많은 분산 된 레포 사본을 지우는 것은 나중에 프로그래밍에 대해 걱정하지 않고 (주요한 운석 영향을 생각하는) 재난이거나 명백한 적의 행동입니다. (그러한 적을 만들지 말아라…) 이것은 모든 것을 호스팅하는 중앙 서버를 잃는 것이 치명적인 타격을받는 비 분산 시스템과는 완전히 대조적이다.


5
지점을 밀지 않고 백업을 유지하지 않고 UPS를 사용하지 않으면 하드웨어 문제로 인해 모든 것이 지워지는 경우에만 책임을 져야합니다. 당신은 도구를 가지고 ...
Donal Fellows

1
git 작업을 트랜잭션으로 처리하는 방법이나 플러그인이 있습니까? 그러한 옵션 또는 플러그인이 존재한다면 나는 그것들 (즉, 작업)이 느려지는 것에 신경 쓰지 않을 것입니다. 다행히도 하드웨어 문제가 없습니다. 불행히도이 건물에서 에너지가 자주 끊어지고 (2 주에 한 번 자체 존재), 나는 전체 시간을 코딩하고 있으며 UPS는 없습니다. 다행히도 나는 그것을 github에 원격으로 (복제 / 푸시)했습니다. 불행히도 나는 모든 것을 롤백하고 프로젝트를 다시 복제해야 할 때 시간을 잃습니다.
Luis Masuelli

2
작업 중 자주 정전이 발생하면 하드웨어를 손상시키지 않으면 파일 시스템이 손상 될 위험이 커집니다. 나는 당신이 UPS를 얻는 아이디어를 왜 즐기지 않는지 궁금합니다.
Bart Silverstrim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.