어떻게 svn 시스템 에서 git 를 사용 합 니까?

더 읽 기
svn 을 사용 하고 있다 면 git 로 바 꾸 고 기 존 svn 코드 라 이브 러 리 를 포기 하고 싶 지 않 으 면 git-svn 을 선택 할 수 있 습 니 다.내 가 svn 에서 git 까지 의 경험 을 말 해 봐.
 
시작 하 다
최신 버 전의 git 를 설치 합 니 다.git 1.5.3 이후 git-svn,git 와 svn 의 조합 을 지원 하려 면 이 기능 을 사용 해 야 합 니 다.
설치 가 끝 난 후 간단 한 설정 을 해 야 합 니 다.가장 직접적인 방법 은 수정~/.gitconfig 를 만 드 는 것 입 니 다.다음은 제.gitconfig 입 니 다.
[user]
        name = Robin Lu
        email = [email protected]
[color]
        diff = auto
        status = auto
        branch = auto
[alias]
  st = status
  rb = svn rebase
  ci = commit -a
  co = checkout

[user]부분 은 사용자 의 신분 을 표시 합 니 다.제출 한 코드 는 이 신분 정 보 를 자동 으로 참조 합 니 다.[color]명령 출력 색상 을 설정 합 니 다.[alias]부분 에 서 는 git status 를 git st 로 간략화 하 는 등 일반적인 명령 을 간소화 할 수 있 습 니 다.
코드 라 이브 러 리 초기 화
우선 git-svn 으로 로 컬 코드 라 이브 러 리 초기 화(reposcory)
git svn

 clone -s

 svn-repository-url

svn-reposcory-url 부분 은 svn 코드 라 이브 러 리 의 url 을 사용 합 니 다.trunk 디 렉 터 리 나 어떤 branch 디 렉 터 리 에서 check out 을 하려 면-s 를-T,-b 등 옵션 으로 바 꿔 야 합 니 다.구체 적 으로 man git-svn 참조.이 명령 은 모든 제출 역 사 를 동기 화 해 야 하기 때문에 이번 한 번 만 이 더 디 지 않 을 것 입 니 다.이 단 계 를 마치 면 로 컬 에 완전한 코드 라 이브 러 리 가 있 습 니 다.모든 commt 의 역사 와 log 를 포함 하여 개발 작업 을 시작 할 수 있 습 니 다.
하지만 개발 을 시작 하기 전에 쓰레기 수집 을 한 번 하 는 것 이 좋다.
git gc


코드 라 이브 러 리 의 정 보 를 쓰레기 수집 과 압축 하 는데 가장 뚜렷 한 역할 은 디스크 의 점용 공간 을 줄 이 는 것 이다.첫 번 째 효과 가 특히 뚜렷 하 다.
코드 라 이브 러 리 의 상 태 를 확인 할 수 있 습 니 다:
git status

지금 은 master 라 는 분기(branch)에 있어 야 합 니 다.
이 명령 으로 모든 브 랜 치 를 표시 합 니 다(branch):
git branch -a


master 앞 에*번호 가 있 습 니 다.현재 있 는 가 지 를 대표 합 니 다.다른 가 지 는 trunk 라 고 합 니 다.원 격 분기(reote branch)이 고 원 격 svn 코드 라 이브 러 리 에 대응 합 니 다.master 는 실제로 trunk 의 로 컬 분기 입 니 다.
다음은 git 가 일부 디 렉 터 리 에 코드 라 이브 러 리 를 추가 하지 않 으 려 는 파일 을 무시 하도록 설정 해 야 합 니 다.svn propset svn:ignore 와 유사 합 니 다.전역 적 으로 파일 목록 을 무시 하면.../.git/info/exclude 파일 에 추가 할 수 있 습 니 다.예 를 들 어 vi 에서 발생 하 는 swp 파일 을 모두 무시 해 야 합 니 다.
.*.swp

디 렉 터 리 와 관련 된 무시 파일 설정 은 이 디 렉 터 리 에서'gitignore'를 만 들 고 무시 해 야 할 내용 을 추가 할 수 있 습 니 다.예 를 들 어 루트 디 렉 터 리 에 있 는 log,tmp 등 디 렉 터 리 를 무시 하고 싶 습 니 다.루트 디 렉 터 리 에 있 는'gitignore'에 직접 추가 할 수 있 습 니 다.
log
tmp

개발 절차
일 을 시작 해도 된다.git 를 사용 한 후 새로운 습관 을 기 르 기 시작 합 니 다.바로 일 하기 전에 새로운 가 지 를 만 드 는 것 입 니 다.
git checkout -b

 new_branch

-b 후 에는 분기 이름 입 니 다.만 드 는 동시에 새 분기 로 이동 해 야 합 니 다.master 에 svn 에 제출 되 지 않 은 commt 를 유지 하면 언제든지 깨끗 한 가 지 를 만 들 수 있 습 니 다.
다음은 코드 를 쓰 고 파일 을 수정 하거나 파일 을 추가 할 수 있 습 니 다.무엇 을 수 정 했 는 지 보고 싶다 면:
git diff


만약 어떤 수정 이 만 족 스 럽 지 못 하 다 면 원상 태 로 회복 하 기 를 원 하 시 면 사용 하 실 수 있 습 니 다.
git checkout path/

filename

svn revert 에 해당 합 니 다.
git 는 색인(index)이라는 개념 을 도입 합 니 다.제출 하기 전에 제출 할 파일 을 git 색인(index)에 추가 해 야 합 니 다.
git add path/

filename1
git add path/

filename2
...

그리고 제출
git commit -m

 "    "


매번 commt 는 색인(index)의 내용 을 제출 합 니 다.
수 정 된 모든 파일 을 한 번 에 제출 하려 면 한꺼번에 추가 한 다음 제출 할 수 있 습 니 다.
git add .
git commit -m

 "    "


수정 만 하고 새 파일 을 추가 하지 않 았 다 면 아래 명령 을 사용 할 수 있 습 니 다.
git commit -a

 -m

 "    "


수 정 된 파일 을 색인 에 추가 하고 제출 하 며 전 과정 을 완료 합 니 다.
가입 한 색인 을 수정 한 후 색인 내용 에 어떤 수정 이 있 는 지 보고 싶 으 면 다음 과 같이 사용 할 수 있 습 니 다.
git diff

 --cached


제출 하기 전에 마지막 code review 를 하기에 적합 합 니 다.
최근 에 제출 한 내용 을 보면 사용 할 수 있 습 니 다.
git show

수정 중 현재 코드 라 이브 러 리 의 상 태 를 수시로 봅 니 다:
git status

svn status
파일 삭제 및 이동:
git rm

 file


git mv

 file

 newfile

svn 에 제출
몇 차례 의 작업 을 마 친 후에 로 컬 내용 을 원 격 svn 에 제출 하려 면 현재 분기 와 원 격 svn 을 동기 화 할 수 있 습 니 다.
git svn

 rebase

그리고 master 분기 에 합 쳐 진 모든 로 컬 수정 사항 을 svn 에 제출 합 니 다.
git svn

 dcommit

git svn rebase 에서 코드 충돌 이 발생 하면 충돌 을 수 동 으로 해결 한 다음 git add 로 색인 을 수정 한 다음 rebase 를 계속 해 야 합 니 다.
git svn

 rebase --continue


결점.
마지막 으로 이런 작업 방식 의 결점 을 말 하 다.이 화 제 는 좀 복잡 하 다.
svn 과 git 의 작업 원 리 는 다 르 기 때문에 git 가 코드 에 제출 한 비 선형 특성 은 svn 에서 재현 하기 어렵 습 니 다.git-merge 나 git-pull 을 사용 한 다음 에 svn 에 제출 하면 관련 분기 의 제출 역 사 는 svn 에 나타 나 지 않 을 수 있 습 니 다.svn 사용자 의 측면 에서 이것 이 제출 인지 합병 인지 분간 할 수 없 기 때문에 svn 과 협력 하 는 과정 에서 merge 를 사용 하지 않 거나 코드 라 이브 러 리 를 선형 으로 유지 하도록 한다.
제 경험 은 svn 에 제출 역 사 를 반영 하 는 지 에 관 계 없 이 merge 를 사용 하 는 것 도 좋 습 니 다.예 를 들 어 작업 이 끝 난 후에 작업 분 지 를 메 인 지점 에 통합 할 수 있 습 니 다.
git checkout master
git merge new_branch

먼저 checkout 명령 으로 master 분기 로 전환 한 다음 새 분기 의 내용 을 합 칩 니 다.그리고 master 분기 에 git svn rebase 와 dcommit 를 만 듭 니 다.svn 으로 볼 때 이것 은 commt,newbranch 의 제출 역 사 는 svn 에 나타 나 지 않 습 니 다.(예외 가 있 으 면 나중에 다시 토론 하 자.
또 하나의 해결 방법 은 git 코드 라 이브 러 리 의 선형 특징 을 최대한 유지 하 는 것 이다.예 를 들 어 newbranch 분기 에서 master 와 rebase 를 한 다음 master 분기 에 통합 합 니 다.
git rebase master
git checkout master
git merge new_branch

그리고 master 에서 dcommit 를 하면 svn 코드 라 이브 러 리 에서 완전한 제출 역 사 를 볼 수 있 습 니 다.
어 지 러 운 것 을 보 았 다 면 아예 상관 하지 않 고 앞의 방법 에 따라 직접 당신 의 업무 지점 에서 dcommit 를 통 해 비 선형 개발 에 대해 어느 정도 알 고 여러 가지 상황 을 볼 수 있 습 니 다.
자,이 정도 면 일 을 할 수 있 을 거 야.
전환 하 다http://www.robinlu.com/blog/archives/194

좋은 웹페이지 즐겨찾기