GitNotes.33-3.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 33.3: 로컬에서 작업하기 (git-svn 환경)

일반적인 git 저장소에서와 마찬가지로, git-svn 로컬 저장소 역시 아래와 같은 git 명령어들을 사용할 수 있다:

  • git add FILEgit checkout -- FILE 을 통해 파일을 stage / unstage 한다.
  • git commit 을 통해 변경사항을 저장한다. 일반적인 git 저장소에서와 마찬가지로, 이 커밋들은 로컬에서만 존재하며 SVN 저장소에 "push" 되지는 않을 것이다.
  • git stashgit stash pop 을 통해 stash 를 사용할 수 있다.
  • git reset HEAD --hard 를 통해 모든 로컬 변경사항들을 되돌린다.
  • git log 를 통해 저장소 내의 모든 history 에 접근한다.
  • git rebase -i 를 통해 로컬 history 를 자유롭게 재구성할 수 있다.
  • git branchgit checkout 을 통해 로컬 브랜치를 생성한다.

git-svn 문서에 명시되어 있듯이, "Subversion 은 Git 에 비해 구식의 (far less sophisticated) 시스템이다". 따라서 git 의 강력한 기능들을 모두 사용하고자 한다면 Subversion 서버에서의 history 를 망쳐버리는 결과가 생길 수 있다. 다행히로, 이를 피하기 위한 간단한 규칙이 존재한다: 선형적인 history 를 유지하라

이는 git 에서 수행가능한 작업 중 대부분이 사용 가능하다는 것을 의미한다: 브랜치를 생성하고, 커밋들을 삭제/재배열/squash 하고, history 를 재작성하고, 커밋들을 삭제하는 등, merge 를 제외한 모든 작업들을 말한다. 만얄 로컬 브랜치들의 history 재통합(reintegrate) 이 필요로 한다면 git rebase 을 이용한다.

merge 를 수행 시에는 merge 커밋이 생성되게 되어 있다. 이 merge 커밋의 특별한 속성은 바로 두개의 부모(parent)를 갖는다는 것이며, 이는 history 가 더이상 선형적으로 유지되지 않을 것임을 의미한다. 이러한 비선형 history 를 가진 merge 커밋을 SVN 저장소로 push 하게 된다면 SVN으로 하여금 혼란스럽게 만들 수 있다.

그렇지만, 걱정을 할 필요는 없다: git merge 커밋을 SVN에 push 하더라도 무엇인가 망가지는 일은 없을 것이다. 만약 git merge 커밋이 SVN 서버로 전송된 경우, 해당 merge 에 연관된 커밋들의 모든 변경사항이 포함이 되어 있을 것이므로, 해당 커밋들의 history 는 유실되더라도 코드 변경사항은 유실되지 않을 것이다.

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts