❗ 반드시 cli가 가능하게 하는 옵션 추가하여 설치하기
https://rios.tistory.com/entry/SVN-TortoiseSVN-%EC%97%90%EC%84%9C-CLI-%EC%82%AC%EC%9A%A9%EB%B2%95
- cli를 이용해야 git 명령어들을 이용하여 svn cli도 이해해볼 수 있기 때문에 꼭 cli가 가능하게 하는 옵션을 추가하여 설치해주기
❗ svn branch
- svn에서 branch를 생성하면, 기본적으로 로컬 브랜치가 아니라 원격 브랜치가 만들어진다.
- 따라서, 내가 브랜치 만드는 순간 서버에 반영된다.
❗ working directory vs working Copy Root Path
- svn info 명령어를 통해 확인할 수 있다.
- working directory는 svn info에서 url을 확인하면 된다.
- working Copy Root Path는 svn info에서 working Copy Root Path 를 확인하면 된다.
- working Copy Root Path는 SVN이 checkout 한 최상위 디렉터리를 의미함.
- working Copy Root Path는 working copy의 최상위 경로를 의미함.
- working copy는 SVN 저장소에서 체크아웃된 로컬 디렉터리 이다.
- working directory는 현재 명령어(svn info)를 실행한 위치를 의미함
⭐svn update
- svn update 라고 입력
- 충돌이 발생할 수 있으므로, commit후에 사용하는 것이 안전
- working directory만 업데이트 한다.
- 즉 svn info를 입력하여 나오는 url이 현재 working directory인데, trunk면 trunk, branch1이면 branch1만
업데이트 된다. - 🤬 gui에서 svn update할 때는 꼭 cli에서 svn info입력하여 현재 branch을 확인하고 업데이트하자. 그렇지 않으면, 다른 브랜치의 내용이 현재 내가 작업하고 있던 폴더에 덮어씌워져서 현재 작업 내용이 사라진다.
⭐svn info
- cmd 창에서 work directory "안으로" 들어가서 svn info 라고 입력하면, 각종 정보들 나온다.
- 예를 들어 나 같은 경우는 STM32L432KSM 안에 들어가서 svn info 라고 입력했다.
⭐trunk 생성 == 브랜치 생성
- svn mkdir svn:// [IP]:[포트] /STM32L432KSM/trunk -m "Create trunk directory"
- 이러면 server에서 trunk 라는 브랜치가 생성된 것이다.
- 로컬에선 아직 반영되지 않는다.
- 먼저 commit 후 최상위 디렉토리에서 svn update를 하면 trunk 라는 브랜치가 생성된 것이 눈에 보인다.
- 최상위 디렉토리에서 svn update를 하면 서버의 최상위 브랜치의 내용들이 내 로컬폴더에 overwrite된다.
- svn MKDIR 명령어 만으로 서버에 브랜치가 만들어지고 커밋도 되는 것이다.
- svn에서 브랜치는 단순히 폴더이지만, svn switch를 이용하여 브랜치 사이에 이동하고 싶으면,
svn copy svn://[IP]:[포트]/STM32L432KSM/RTOSport/trunk svn://[IP]:[포트]/STM32L432KSM/RTOSport/branches/branch1 -m "Create branch1 from trunk"
이런 방식으로 하면 된다.
- 그러면 SVN이
trunk
에서branch1
이 갈라졌다고 기록하므로, 이후svn switch
가 가능하다.
svn mkdir svn://[IP]:[포트]/STM32L432KSM/RTOSport/branches/branch1 -m "Create branch1"
- 이렇게 branch1 브랜치를 만들고 trunk의 파일들을 수동으로 복사하는 방식은 SVN이 trunk와 branch1이 같은 조상이라는 기록을 남기지 않기 때문에 브랜치끼리 switch가 불가능하다.
- 만약
svn copy
없이 브랜치를 만들어버렸다면,svn switch
를 사용할 수 없다. 이 경우, switch 대신 새로운 checkout을 해야 한다.
⭐trunk 제거 == 브랜치 제거
svn delete svn://[IP]:[포트]/STM32L432KSM/trunk -m "Removed trunk directory"
- 이러면 서버에서 브랜치가 삭제되고, 커밋도 되는 것이다.
- 로컬에서만 trunk를 제거하고 싶으면, 그냥 gui로 로컬폴더 삭제하면 된다.
- 상위 브랜치를 삭제한다고 해서, 하위브랜치가 자동으로 삭제되진 않는다.
⭐trunk로 root 디렉토리의 파일과 폴더들을 옮기기
svn move svn://[IP]:[포트]/STM32L432KSM/* svn://[IP]:[포트]/STM32L432KSM/trunk -m "Move files to trunk"
- 기존 파일들을 trunk 디렉토리로 옮기는 것이다.
- 꼭 확장자를 포함해서 옮기자(.txt .ioc)
⭐svn checkout
svn checkout svn://[IP]:[포트]/STM32L432KSM/trunk D:\develope\stm32\STM32L432KSM-trunk
- svn://[IP]:[포트]/STM32L432KSM/trunk 는 서버에서 특정 브랜치를 가리킨다.
- D:\develope\stm32\STM32L432KSM-trunk 여기서 STM32L432KSM-trunk는 그냥 로컬 폴더명이다.
- 결과적으로 STM32L432KSM-trunk 폴더 안에다가 서버의 trunk 브랜치의 내용을 checkout 하는것이다.
- checkout을 할 때부터, 특정 브랜치만 checkout을 해야한다.
- checkout은 gui로 로컬에서 폴더 만들고, 밑에 Figure1 처럼 gui로 브랜치 하나 정해서 checkout하는게 나은 것 같다.
⭐svn switch
- 브랜치를 사용하는 목적이 무엇인가?
- 개별적으로 브랜치를 관리하여, 각자 개발하고, 역할분담하기 위해서이다.
- 로컬의 어떤 폴더에 checkout 할 때는, 특정 브랜치를 선택할 수 있지만, commit할 때는 gui로 선택할 수 없다.
- 만약 서버의 다른 브랜치에 commit하고 싶다면 svn switch 명령을 입력해줘야 한다.
- 예를 들어 내가 위의 사진 Figure1처럼 /RTOSport/trunk 브랜치에서 checkout을 했다고 하자. 그리고 commit은 Figure2처럼 /RTOSport/branches/branch1 브랜치에 commit하고 싶다고 하자.
- 그러면 꼭 svn switch svn://[IP]:[포트]/STM32L432KSM/RTOSport/branches/branch1 이 명령을 적어줘야 한다.
- svn switch가 잘 되었나 확인하는 방법은 svn info를 입력해보는 것이다. svn info를 입력했을 때 나오는 URL을 확인하면 현재 branch가 무엇인지 확인할 수 있다. svn info를 입력할 때 나오는 URL이 현재 브랜치이다.
- 만약 checkout 할 당시에, 서버의 /RTOSport/trunk 브랜치 같은 개별 브랜치를 체크아웃 한게 아니라 /STM32L432KSM 이런 최상위 브랜치를 체크아웃 해버렸다면, 로컬에서 cd 명령어를 통해서도 브랜치를 변경할 수 있다.[즉 cd 명령어로도, svn switch 명령어로도 브랜치를 바꿀 수 있게 된다.]
- 그러나 /STM32L432KSM 이런 최상위 브랜치를 체크아웃 하는 것은 work flow 안정성를 해치는 것 같다. 따라서 앞으로는 꼭 로컬 디렉토리에 체크아웃 할 때, 개별 브랜치를 체크아웃 하자!!
⭐svn 브랜치 리스트 확인
svn ls svn://[IP]:[포트]/STM32L432KSM/RTOSport/
- 이렇게 입력하면 RTOSport 디렉토리 하위의 브랜치들이 출력됨.
- 어느 경로에서 실행하든 상관없음. 서버 상황을 출력하는 것이기 때문.
svn ls svn://[IP]:[포트]/STM32L432KSM/RTOSport/branches/
- 이렇게 입력하면 branches 하위의 브랜치들이 출력됨
'기타 > 협업 Tool' 카테고리의 다른 글
SVN merge & 충돌시 대처법 (0) | 2025.03.18 |
---|