이것은 git 태그가 붙어 있기 때문에 SVN 지식이 부족하다는 것을 무시할 수 있기를 바랍니다.
현재 repo를 복제하고 gitk를 사용하여 특정 분기를 복제하고 있습니다.
특정 지점뿐만 아니라 전체 원격 저장소를 복제하고 있습니다.
저장소는 데이터베이스로 가장 잘 상상되므로 원격 데이터베이스의 현재 상태를 복제하고 있습니다. 그러나 그 후에는 자신의 데이터베이스 사본에서 작업하고 있습니다. 커밋하면 로컬 데이터베이스가 변경됩니다.
이 fetch
명령은 로컬 데이터베이스를 원격 데이터베이스와 동기화 상태로 유지하는 데 사용됩니다.
일반적으로 해당 로컬 데이터베이스에서 작업 할 분기를 체크 아웃합니다. 이것은 현재 작업이 시작된 git의 내부 마커와 다릅니다.
을 제외한 분기가없는 간단한 리포지토리에서 작업중인 경우 "매직"을 공개하기 위해 폴더를 master
살펴볼 수 있습니다 .git
.
마지막 커밋 ( master
)이 있다고 가정 182e8220b404437b9e43eb78149d31af79040c66
하면 아래에서 정확히 찾을 수 cat .git/refs/heads/master
있습니다.
그로부터 당신은 새로운 지점 git checkout -b mybranch
에서 분기 , 당신은 파일에서 정확히 같은 포인터를 찾을 수 있습니다 cat .git/refs/heads/mybranch
.
지점은 "포인터"에 지나지 않습니다. "작업 중"마커를이라고합니다 HEAD
.
당신이 어디에 있는지 알고 싶다면 HEAD
:
cat .git/HEAD
이는 예를 들어 말한다 ref: refs/heads/mybranch
, 턴 포인트 (이 cat .git/refs/heads/mybranch
해시를 커밋)를에78a8a6eb6f82eae21b156b68d553dd143c6d3e6f
실제 커밋은 objects
폴더 아래에 저장됩니다 (자체 주제는 어떻습니까).
프로젝트 폴더에는 해당 브랜치의 내용 만 포함되어 있으며 SVN에서와 같이 모든 브랜치를 볼 수 없으므로 약간 혼란 스럽습니다.
working directory
전체를 "git-database"와 혼동하지 마십시오 . 위에서 말했듯이 작업 디렉토리는 하위 집합의 스냅 샷 일뿐입니다.
다른 브랜치가 있다고 가정하면 작업 디렉토리는 해당 브랜치에서만 작업하는 데 전념합니다 (다른 곳에서 작업을 할 수는 있음).
일반적으로 프로젝트에 어떤 분기가 정의되어 있는지 확인하려면 다음과 같은 가능성이 있습니다.
git branch
현지 지점
git branch --remote
원격 지점
git branch -a
모두
(또는 git branch -v
)
git은 분산 버전 제어 시스템이므로 다른 브랜치를 로컬 / 원격으로 만드는 것이 가능하지만 권장됩니다.
내 일반적인 작업 과정은 다음과 같습니다
- 기능 분기 해제
- 해당 지점에서 WIP (작업 진행 중) 지점
- 단 한 줄만 커밋하더라도 원하는대로 작동합니다. 상관 없어
기능이 완료되면 :
WIP
지점을 스쿼시 / 재 작업 (대화식 rebasing 사용) = 그로부터 단일 커밋 만들기
WIP
브랜치를 피처 브랜치로 병합하고 안정적인 (마스터) 브랜치에 통합 할 수 있도록 제공합니다 (github에서 작업하는 경우 "풀 요청"이라고 함).
또한 두 분기에서 동시에 wprl 해야하는 프로세스를 처리하는 방법을 알고 싶습니다. 예를 들어, 마스터에 핫픽스를 만들어야하지만 다른 분기의 내용도 유지해야합니다.
프로젝트 구성 방식에 따라 다릅니다.
안정적인 주인이 있다고 가정 해보십시오. 그리고 기능은 안정적인 지점에서만 개발되므로 일반적으로 기능 지점 뒤에 있습니다. 그런 다음 기능 분기의 루트가 될 마스터에 대한 마지막 커밋이 있습니다.
그런 다음 마스터 브랜치를 커밋하고 두 브랜치를 함께 병합 할지 아니면 리베이스 (고급 요구 사항이있는 사용자에게는 일종의 병합)로 결정할 수 있습니다.
또는 항상 분기 (예 master
:)를 변경 하고 다른 분기로 체리 픽을 선택할 수 있습니다.
GIT의 저장소에서 복제 된 분기를 포함하는 폴더를 만드는 권장 이름 규칙은 무엇입니까? 예 : myproject-branchname
너하기에 달렸다.
일반적으로 리포지토리 이름으로 끝납니다.
그러나 이것이 바람직하지 않은 경우가 있습니다.
예를 들어, 당신은 오 - 내 - zsh을 가진 복제 git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
여기가 .oh-my-zsh
명시 적으로 대상으로 지정됩니다.