Visual Studio - git을 이용한 로컬 소스 컨트롤
이 글을 읽기 위해서는 다음의 글을 먼저 읽어보셔야 합니다.
Visual Studio를 위한 Git 환경 설정
; https://www.sysnet.pe.kr/2/0/1501
위의 글을 통해 개발환경 구성을 한 후, "
프로 Git: 그림으로 이해하는 Git의 작동 원리와 사용법" 책으로 git에 대한 개념을 익히셨으면 이제 Visual Studio를 이용해 소스 컨트롤을 할 수 있습니다. 뭐랄까, 마치 TFS Express를 설치해 두고 로컬에서 소스 컨트롤을 하는 것과 동일하게 작업할 수 있습니다. (개인적인 의견으로,
혼자서 사용할 목적으로 소스 컨트롤을 사용한다면 TFS Express보다는 git을 권장하고 싶습니다. ^^)
그럼, 이제부터 기본적인 git 사용법을 한번 익혀볼까요? ^^
우선, 현재 생성해 둔 Visual Studio 솔루션 전체를 git 로컬 저장소에 추가해 보겠습니다. 다음과 같이 솔루션 노드에서 "Create Git Repository" 메뉴를 선택하면,
예의 TFS/VSS에 처음 프로젝트 관리가 추가된 것처럼 솔루션 노드의 각 아이콘들이 바뀝니다.
아울러, .sln 파일이 있던 폴더 바로 하위에는 새롭게 ".git" 폴더가 생성되어 git 저장소가 자리잡습니다. TFS에서는 SQL 서버의 mdf/ldf 파일로 저장되지만, git에서는 ".git" 폴더에 모든 변경 이력이 보관됩니다. (이 때문에 백업이 매우 쉽습니다.)
TFS/VSS와 비교해 보면 직관적으로 아직 check-in되어 보관되지 않은 상태라는 것을 알 수 있는데요. git에서 check-in에 해당하는 기능은 commit이므로 솔루션 노드에 대해 다음과 같이 "Commit" 명령을 선택해 주면,
(*앞으로 모든 git 명령어는 아래 그림의 메뉴를 이용해서 실행시킵니다.)
이어서 다음과 같이 어떤 파일들을 commit할지 선택하는 창이 뜹니다.
처음 추가하는 것이니, 하단의 모든 파일들을 선택하고 "OK" 버튼을 누르면 다음과 같이 TFS/VSS 사용했던 때와 유사하게 체크인 된 아이콘으로 각각의 파일 상태가 바뀝니다.
git에 추가한 후 이제 check-in/out에 대한 방법을 알아봐야 하는데요. 그냥 해당 소스 코드를 변경하는 순간에는 아무런 변화가 발생하지 않습니다. TFS/VSS의 경우에는 소스 코드를 변경 순간 check-out을 자동으로 하게 되는데 git은 그렇지 않다는 차이가 있습니다.
대신, 변경과 함께 명시적으로 "저장"하는 순간 다음 화면과 같이 check-out 아이콘으로 변하면서 "Git Source Control Provider"와 함께 제공되는 git을 위한 "Pending Changes" 창에 다음과 같이 해당 파일이 "Modified" 상태로 바뀌었음을 알려줍니다.
재미있는 것은 위의 상태에서 변경했던 코드를 그대로 삭제하고 이전 파일과 동일한 내용으로 바꾼 후 저장하면 Visual Studio는 자동으로 해당 파일을 이전의 check-in 상태로 변환해주고 Modified 상태도 제거해 줍니다. 이점 또한 TFS/VSS를 사용하던 것과는 약간 다른 동작입니다.
이렇게 check-out 된 상태는 사실 git 입장에서는 Modified 상태일 뿐, stage 상태가 아니기 때문에 원래는 commit이 안됩니다. 하지만, Visual Studio의 "Git Source Control Provider"는 TFS/VSS의 경험을 그대로 유지할 수 있도록 Modified 상태의 파일만 있을 때에도 Commit 명령을 실행할 수 있고, ("git commit -a" 명령으로 staging area 단계를 생략하겠죠.)
Visual Studio의 Git 메뉴를 이용해 "History"를 선택해 보면 다음과 같이 커밋 히스토리를 다이어그램 형식으로 확인할 수 있습니다.
이 정도면, git을 이용해 check-in/out 정도의 수준으로 기존 TFS/VSS와 유사하게 소스 컨트롤을 사용할 수 있겠지요. ^^
일단, 여기까지는 로컬 저장소에서 운영을 하는 것이므로 솔루션 폴더 자체를 다른 곳에 백업해 주면 나중에 그 백업만으로 소스코드의 모든 커밋 히스토리를 함께 복원할 수 있습니다.
참고로, Visual Studio의 git 메뉴에 모든 git 명령어가 제공되는 것은 아닙니다. 예를 들어, 위에서 했던 "add test code"에 해당하는 커밋을 삭제하고 싶다면 "git reset ...[생략]..."을 내려야 하는데 이를 위해서는 다음과 같이 "git bash"를 실행시키고,
실행된 shell 창에서 다음과 같이 "git reset --hard HEAD~1" 명령어를 직접 실행시켜줘야 합니다.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]