본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
Section 33.3: 로컬에서 작업하기 (git-svn 환경)
일반적인 git 저장소에서와 마찬가지로, git-svn 로컬 저장소 역시 아래와 같은 git 명령어들을 사용할 수 있다:
git add FILE
과git checkout -- FILE
을 통해 파일을 stage / unstage 한다.git commit
을 통해 변경사항을 저장한다. 일반적인 git 저장소에서와 마찬가지로, 이 커밋들은 로컬에서만 존재하며 SVN 저장소에 "push" 되지는 않을 것이다.git stash
와git stash pop
을 통해 stash 를 사용할 수 있다.git reset HEAD --hard
를 통해 모든 로컬 변경사항들을 되돌린다.git log
를 통해 저장소 내의 모든 history 에 접근한다.git rebase -i
를 통해 로컬 history 를 자유롭게 재구성할 수 있다.git branch
와git 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)
'번역 > Git Notes for Professionals' 카테고리의 다른 글
33.5: 빈 디렉토리 다루기 (git-svn 환경) (0) | 2020.02.03 |
---|---|
33.4: SVN 으로부터 최신 변경사항을 가져오기 (0) | 2020.01.31 |
33.2: 로컬 변경사항을 SVN 에 push 하기 (0) | 2020.01.30 |
33.1: SVN 저장소를 clone 하기 (0) | 2020.01.30 |
32.1: Git 은 디렉토리를 추적하지 (track) 않는다 (0) | 2020.01.30 |