초보자를위한 Git : 확실한 실용 가이드
좋아, PJ Hyett의이 게시물을 보고 끝으로 건너 뛰고 Git 을 사용하기로 결정했습니다 .
그래서 제가 필요한 것은 Git에 대한 초보자를위한 실용적인 가이드입니다. "초보자"는 컴파일러를 처리하는 방법을 알고 Makefile 이 무엇인지 어느 정도 이해하고 소스 제어를 잘 이해하지 못한 채 소스 제어에 손을 댄 사람으로 정의됩니다 .
"실용적"이라는 것은이 사람이 Git이 백그라운드에서 수행하는 작업에 대해 자세히 알아보고 싶지 않으며 배포되는 것을 신경 쓰지 않습니다 (또는 알지 못함). 귀하의 답변은 가능성을 암시 할 수 있지만 백업되고 안전한 '서버'에 '주'저장소를 유지하고 로컬 저장소를 단순히 '클라이언트'리소스로 취급하려는 초보자를 목표로하십시오.
그래서:
설치 / 설정
- Git 설치 방법
- Git을 어떻게 설정합니까? Linux, Windows, Mac을 다루고 '클라이언트 / 서버'사고 방식을 생각하십시오.
- 새 프로젝트 / 저장소는 어떻게 생성합니까?
- 실제로 코드베이스의 일부가 아닌 파일 (.obj, .user 등)을 무시하도록 어떻게 구성합니까?
코드 작업
- 최신 코드는 어떻게 얻습니까?
- 코드를 어떻게 확인합니까?
- 변경 사항을 어떻게 커밋합니까?
- 커밋되지 않은 항목이나 현재 코드베이스의 상태를 어떻게 확인합니까?
- 원치 않는 커밋을 어떻게 제거합니까?
- 파일의 두 버전을 비교하거나 현재 파일과 이전 버전을 어떻게 비교합니까?
- 파일 수정 내역을 어떻게 봅니까?
- 바이너리 파일 (예 : Visio 문서 또는 컴파일러 환경)을 어떻게 처리합니까?
- "동시에"변경된 파일을 어떻게 병합합니까?
- 커밋을 어떻게 실행 취소 (되돌 리거나 재설정)합니까?
태그 지정, 분기, 릴리스, 기준
- 나중에 언제든지 가져올 수 있도록 특정 파일 세트에 대한 특정 개정 세트를 '태그'또는 '릴리스'하는 방법은 무엇입니까?
- 특정 '릴리스'를 어떻게 가져 오나요?
- 어떻게 분기합니까?
- 분기를 어떻게 병합합니까?
- 충돌을 해결하고 병합을 완료하는 방법은 무엇입니까?
- 한 분기의 일부를 다른 분기로 병합하는 방법은 무엇입니까?
- 리베이스 란 무엇입니까?
- 원격 지점을 어떻게 추적합니까?
- 원격 저장소에 분기를 생성하려면 어떻게해야합니까?
- 원격 저장소에서 브랜치를 어떻게 삭제합니까?
- Git 워크 플로 예제
다른
- Git을 명령 줄이 아닌 리소스로 만드는 좋은 GUI, IDE 플러그인 등을 설명하고 연결합니다. 그러나 그 제한 사항과 장점을 나열하십시오.
- 초보자가 알아야 할 다른 일반적인 작업이 있습니까?
- 소스 제어 소스로 설정된 Subversion 저장소를 어떻게 효과적으로 사용합니까?
다른 Git 초보자를위한 참고 자료
- Git 가이드
- 힘내 책
- 힘내 매직
- gitcasts
- GitHub 가이드
- Git 튜토리얼
- Progit-Scott Chacon의 책
- Git-SVN 단기 집중 과정
- 아래에서 위로 힘내
- 힘내 준비
- gitref.org
- Git 비주얼 치트 시트
Git 탐구
나는 수시로 항목을 살펴보고 일관된 모양 / 느낌을 갖도록 '정리'할 것입니다. 목록을 쉽게 스캔 할 수 있습니다.-간단한 "머리글-간단한 설명-지침 목록-문제 및 추가 정보 "템플릿. 또한 나중에 쉽게 찾을 수 있도록 위의 글 머리 기호 목록의 항목에 링크 할 것입니다.
새 프로젝트 / 저장소는 어떻게 생성합니까?
git 저장소는 단순히 특별한 .git
디렉토리를 포함하는 디렉토리입니다.
이것은 "저장소"가 checkout
"작업 복사본"디렉토리 에있는 원격 서버에서 호스팅되는 "중앙 집중식"버전 제어 시스템 (예 : 하위 버전)과 다릅니다 . git을 사용하면 작업 복사본 이 저장소입니다.
git init
추적하려는 파일이 포함 된 디렉토리에서 실행하기 만하면 됩니다.
예를 들면
cd ~/code/project001/
git init
그러면 .git
현재 디렉터리에 (숨겨진) 폴더가 생성 됩니다.
새 프로젝트를 만들려면 git init
추가 인수 (생성 할 디렉터리 이름)를 사용하여 실행합니다 .
git init project002
(This is equivalent to: mkdir project002 && cd project002 && git init)
현재 경로가 git 저장소 내에 있는지 확인하려면 실행 git status
하면됩니다. 저장소가 아닌 경우 "심각한 : git 저장소가 아님"을보고합니다.
.git
디렉토리를 나열 하고 다음과 유사한 파일 / 디렉토리가 포함되어 있는지 확인할 수도 있습니다.
$ ls .git
HEAD config hooks/ objects/
branches/ description info/ refs/
어떤 이유로 든 저장소를 "de-git"하려는 경우 (해당 프로젝트를 추적하기 위해 git 사용을 중지하려는 경우). .git
저장소의 기본 수준에서 디렉토리를 제거하기 만하면 됩니다.
cd ~/code/project001/
rm -rf .git/
주의 : 이것은 모든 개정 기록, 모든 태그, git이 수행 한 모든 것을 파괴 합니다 . "현재"파일 (현재 볼 수있는 파일)은 건드리지 않지만 이전 변경 사항, 삭제 된 파일 등은 복구 할 수 없습니다!
Git 용 GUI
Git GUI
git에 포함 — git gui
명령 줄에서 실행 하면 Windows msysgit 설치 프로그램이 시작 메뉴에 추가합니다.
Git GUI는 git로해야 할 일의 대부분을 수행 할 수 있습니다. 단계 변경 포함, git 및 리포지토리 구성, 변경 사항 푸시, 분기 생성 / 체크 아웃 / 삭제, 병합 및 기타 여러 가지.
내가 가장 좋아하는 기능 중 하나는 파일의 특정 부분을 커밋 할 수있는 오른쪽 클릭 메뉴의 "스테이지 라인"및 "스테이지 덩어리"바로 가기입니다. 을 통해 동일한 결과를 얻을 수 git add -i
있지만 사용하기가 더 쉽습니다.
가장 예쁜 응용 프로그램은 아니지만 거의 모든 플랫폼에서 작동합니다 (Tcl / Tk 기반).
GitK
git에도 포함됩니다. git 히스토리 뷰어이며 저장소의 히스토리 (브랜치가 생성되고 병합 될 때 포함)를 시각화 할 수 있습니다. 커밋을보고 검색 할 수 있습니다.
git-gui와 잘 어울립니다.
Gitnub
Mac OS X 응용 프로그램. 주로와 동일 git log
하지만 github (예 : "네트워크보기") 와 일부 통합됩니다 .
예쁘고 Mac OS X에 적합합니다. 저장소를 검색 할 수 있습니다. Gitnub의 가장 큰 비판은 선형 방식 (한 번에 하나의 분기)으로 역사를 보여준다는 것입니다. 이는 계획된 개선이긴하지만 git에서 중요 할 수있는 분기 및 병합을 시각화하지 않습니다.
링크 다운로드, 변경 로그 및 스크린 샷 | Git 저장소
GitX
"OS X 용 gitk 클론"을 의도합니다.
비선형 분기 히스토리를 시각화하고, 커밋을 수행하고, 커밋을보고 검색 할 수 있으며, 모든 개정판의 모든 파일을 "빠른보기"(파일 목록보기에서 공백 누르기), 모든 파일 내보내기와 같은 다른 멋진 기능이 있습니다. (드래그 앤 드롭을 통해).
git-gui
/ 보다 OS X에 훨씬 더 잘 통합되며 gitk
매우 큰 저장소에서도 빠르고 안정적입니다.
원래 git 저장소 pieter 는 최근에 업데이트되지 않았습니다 (작성 당시 1 년 이상). 더 활발하게 관리되는 브랜치는 brotherbard / gitx 에서 사용할 수 있습니다. "사이드 바, 가져 오기, 가져 오기, 푸시, 원격 추가, 병합, 체리 선택, 리베이스, 복제, 복제 대상"을 추가합니다.
다운로드 | 스크린 샷 | 자식 저장소 | 브라더 바드 포크 | laullon 포크
SmartGit
홈페이지에서 :
SmartGit은 분산 버전 제어 시스템 Git의 프런트 엔드이며 Windows, Mac OS X 및 Linux에서 실행됩니다. SmartGit은 명령 줄 클라이언트보다 그래픽 사용자 인터페이스를 선호하는 개발자를 위해 현재 가장 강력한 DVCS 인 Git을 사용하여 생산성을 더욱 높일 수 있습니다.
웹 사이트 에서 다운로드 할 수 있습니다 .
TortoiseGit
Windows 사용자를위한 TortoiseSVN Git 버전.
TortoiseSVN을 TortoiseGit으로 포팅합니다. 최신 릴리스 1.2.1.0이 릴리스는 커밋, 로그 표시, 두 버전 비교, 브랜치 및 태그 생성, 패치 생성 등과 같은 일반 작업을 완료 할 수 있습니다. 자세한 내용은 릴리스 노트 를 참조하십시오 . 이 프로젝트에 기여해 주셔서 감사합니다.
QGit
QGit은 Qt / C ++에 구축 된 git GUI 뷰어입니다.
qgit을 사용하면 수정 내역을 찾아보고, 패치 내용과 변경된 파일을 볼 수 있으며, 다른 개발 분기를 그래픽으로 따라갈 수 있습니다.
gitg
gitg는 gtk + / GNOME을 대상으로하는 git 저장소 뷰어입니다. 주요 목표 중 하나는 여러 데스크톱에서 git 프런트 엔드에 더 통합 된 사용자 경험을 제공하는 것입니다. 이것은 크로스 플랫폼 애플리케이션을 작성하는 것이 아니라 다른 운영 체제 (OS X 용 GitX와 같은)의 유사한 클라이언트와 긴밀한 협력을 통해 이루어집니다.
풍모
- 개정 내역을 찾아보십시오.
- 대규모 리포지토리를 처리합니다 (Linux 리포지토리, 17000 개 이상의 개정판로드, 1 초 미만).
- 변경 사항을 커밋합니다.
- 개별 심술쟁이 무대 / 언 스테이지.
- 변경 사항을 되돌립니다.
- 개정판 변경 사항의 색상 차이를 표시합니다.
- 주어진 개정에 대한 찾아보기 트리.
- 주어진 개정판 트리의 일부를 내 보냅니다.
- 히스토리를 빌드하기 위해 'git log'와 같은 명령이 이해할 수있는 모든 refspec을 제공하십시오.
- 내역보기에서 분기를 표시하고 전환합니다.
Gitbox
Gitbox는 Git 버전 제어 시스템을위한 Mac OS X 그래픽 인터페이스입니다. 단일 창에서 분기, 기록 및 작업 디렉토리 상태를 볼 수 있습니다.
일상적인 작업은 간단합니다. 확인란을 사용하여 변경 사항을 준비 및 해제합니다. 한 번의 클릭으로 커밋, 당기기, 병합 및 밀기. 변경 사항을 두 번 클릭하여 FileMerge.app과의 차이점을 표시하십시오.
Gity
Gity 웹 사이트에는 정보가 많지 않지만 스크린 샷을 보면 기능이 풍부한 오픈 소스 OS X git gui 인 것으로 보입니다.
멜드
Meld는 시각적 비교 및 병합 도구입니다. 두 개 또는 세 개의 파일을 비교하고 제자리에서 편집 할 수 있습니다 (diff는 동적으로 업데이트 됨). 두 개 또는 세 개의 폴더를 비교하고 파일 비교를 시작할 수 있습니다. CVS, Subversion, Bazaar-ng 및 Mercurial [ 및 Git ] 과 같은 널리 사용되는 버전 제어 시스템에서 작업 사본을 찾아보고 볼 수 있습니다 .
카타나
Steve Dekorte의 OSX 용 Git GUI.
한눈에 어떤 원격 브랜치가 가져 오기를 변경하고 로컬 리포지토리에 푸시가 변경되었는지 확인합니다. 추가, 커밋, 푸시, 풀, 태그 및 재설정의 git ops는 물론 로컬 변경 사항 및 추가 사항을 강조하는 프로젝트 계층 구조의 시각적 차이 및 시각적 검색이 지원됩니다.
저장소 1 개는 무료, 추가 비용은 $ 25입니다.
Sprout (이전의 GitMac)
Git을 사용하기 쉽게 만드는 데 중점을 둡니다. 기본 Cocoa (mac과 유사한) UI, 빠른 저장소 검색, 복제, 푸시 / 풀, 분기 / 병합, 시각적 차이, 원격 분기, 터미널에 대한 쉬운 액세스 등을 제공합니다.
가장 일반적으로 사용되는 Git 작업을 직관적이고 쉽게 수행 할 수 있도록함으로써 Sprout (이전의 GitMac)은 Git을 사용자 친화적으로 만듭니다. 대부분의 Git 워크 플로와 호환되는 Sprout은 디자이너와 개발자, 팀 공동 작업, 고급 및 초보 사용자 모두에게 적합합니다.
탑
Mac OSX 용 기능이 풍부한 Git GUI. 30 일 무료 평가판, 단일 사용자 라이선스의 경우 미화 59 달러.
EGit
EGit은 Git 버전 제어 시스템을위한 Eclipse Team 공급자입니다. Git은 분산 된 SCM입니다. 즉, 모든 개발자는 코드의 모든 개정 내역에 대한 전체 사본을 가지고 있으므로 내역에 대한 쿼리를 매우 빠르고 다양하게 만듭니다.
EGit 프로젝트는 Git의 JGit Java 구현 위에 Eclipse 도구를 구현하고 있습니다.
Git 확장
Windows 용 오픈 소스-Git 작업에 필요한 모든 것을 사용하기 쉬운 단일 패키지로 설치합니다.
Git Extensions는 Windows에서 Git을보다 직관적으로 사용할 수 있도록하는 툴킷입니다. 셸 확장은 Windows 탐색기에 통합되어 파일 및 디렉터리에 대한 컨텍스트 메뉴를 표시합니다. Visual Studio의 git을 사용하는 Visual Studio 플러그인도 있습니다.
git gui 항목에 대해 자세히 설명해 주신 dbr 에게 감사드립니다 .
SourceTree
SourceTree는 Git, Mercurial 및 SVN을위한 무료 Mac 클라이언트입니다. BitBucket의 배후 인 Atlassian에 의해 구축되었으며 모든 VC 시스템과 똑같이 잘 작동하는 것으로 보이며 모든 프로젝트에 사용할 단일 도구를 마스터 할 수 있지만 버전은 제어됩니다. 기능이 풍부하고 무료입니다.
초보자와 고급 사용자 모두를위한 전문가 준비 및 기능 팩 :
발신 및 수신 변경 집합을 검토합니다. 가지 사이에서 체리를 선택하십시오. 패치 처리, 리베이스, 숨김 / 보류 등.
글쎄요, 우리가 다른 리소스에 "단순히"연결하지 말라고 요청 하셨음에도 불구하고, 커뮤니티에서 성장한 (그리고 성장하는) 리소스가 이미 존재하는 것은 정말 어리석은 일입니다 : Git Community Book . 진지하게, 질문에있는이 20 개 이상의 질문은 간결하고 일관 적이 지 않을 것입니다. Git Community Book은 HTML과 PDF로 제공되며 명확하고 형식이 잘 지정되어 있으며 동료 검토를 거친 답변과 당면한 문제로 바로 이동할 수있는 형식으로 많은 질문에 답변합니다.
아아, 내 게시물이 정말 화 나면 삭제하겠습니다. 그렇게 말하세요.
파일을 무시하도록 구성하는 방법 :
추적하지 않으려는 파일을 git이 무시하도록하는 기능은 매우 유용합니다.
파일 또는 파일 세트를 무시하려면 패턴을 제공합니다. git의 패턴 구문은 매우 간단하지만 강력합니다. 아래에서 언급 할 세 가지 파일 모두에 적용 할 수 있습니다.
- 빈 줄은 파일을 무시하지 않으며 일반적으로 구분 기호로 사용됩니다.
- #으로 표시된 줄 은 주석 역할을합니다.
- ! 접두사는 선택 사항이며 패턴을 무효화합니다. 일치하는 부정 패턴은 더 낮은 우선 순위 패턴을 재정의합니다.
- 고급 표현식 및 와일드 카드 지원
- 예 : 패턴 : *. [oa] 는 저장소의 .o 또는 .a로 끝나는 모든 파일 (오브젝트 및 아카이브 파일)을 무시합니다.
- 패턴에 슬래시로 끝나는 디렉토리가있는 경우 git은이 디렉토리 및 그 아래의 경로와 만 일치합니다. 이것은 일치에서 일반 파일과 심볼릭 링크를 제외합니다.
- 선행 슬래시는 해당 경로 이름의 모든 파일과 일치합니다.
- 예 : /*.c 패턴 은 foo.c 파일과 일치 하지만 bar / awesome.c 는 일치 하지 않습니다.
gitignore (5) 매뉴얼 페이지 의 훌륭한 예 :
$ git status
[...]
# Untracked files:
[...]
# Documentation/foo.html
# Documentation/gitignore.html
# file.o
# lib.a
# src/internal.o
[...]
$ cat .git/info/exclude
# ignore objects and archives, anywhere in the tree.
*.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
# Documentation/foo.html
[...]
일반적으로 추적되지 않은 파일을 무시하는 세 가지 방법이 있습니다.
1) 저장소의 모든 사용자에 대해 무시 :
.gitignore 라는 파일을 작업 복사본의 루트에 추가합니다 .
.gitignore 를 편집 하여 파일을 무시하거나 무시해서는 안되는 환경 설정에 맞 춥니 다 .
git add .gitignore
완료되면 커밋합니다.
2) 저장소 사본 만 무시하십시오.
작업 복사본에서 원하는 패턴으로 $ GIT_DIR / info / exclude 파일을 추가 / 편집합니다 .
예 : 내 작업 복사본은 ~ / src / project1이므로 ~ / src / project1 / .git / info / exclude를 편집합니다.
끝났습니다!
3) 시스템의 모든 상황에서 무시하십시오.
시스템에 대한 전역 무시 패턴은 원하는 이름의 파일에 넣을 수 있습니다.
내 개인적으로 ~ / .gitglobalignore
그런 다음 ~ / .gitconfig 파일을 다음 줄로 편집하여 git에게이 파일을 알릴 수 있습니다 .
core.excludesfile = ~/.gitglobalignore
끝났습니다!
gitignore man 페이지가 더 많은 정보를 얻을 수있는 최고의 리소스 라고 생각합니다 .
특정 개정판에 어떻게 '태그'를 지정합니까?
나중에 언제든지 가져올 수 있도록 특정 파일 세트에 대한 특정 개정 세트를 '태그'또는 '릴리스'하는 방법은 무엇입니까?
git tag
명령 사용 .
단순히 현재 개정판에 "태그"를 지정하려면 ..
git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'
현재 태그를 나열하려면 git tag
인수없이 실행 하거나 -l
(소문자 L) :
$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname
태그를 삭제하려면 다음 -d
플래그 를 사용합니다 .
$ git tag -d thetagname
Deleted tag 'thetagname'
$ git tag
[no output]
특정 (이전) 커밋에 태그를 지정하려면 ..
git tag [tag name] [revision SHA1 hash]
예를 들면 :
git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b
참고 : 기본적으로 git은 "lightweight"태그 (기본적으로 특정 개정에 대한 참조)를 생성합니다. "올바른"방법은 -a
플래그 를 사용하는 것 입니다. 그러면 태그 메시지를 요청하는 편집기가 시작됩니다 (커밋 메시지를 요청하는 것과 동일하며 -m
플래그를 사용 하여 명령 줄에 태그 메시지를 제공 할 수도 있음 ). 주석이 달린 태그를 사용하면 자체 ID, 날짜, 태거 (작성자) 및 선택적으로 GPG 서명 ( -s
태그 사용)이있는 객체가 생성 됩니다. 이에 대한 자세한 내용은 이 게시물을 참조하십시오.
git tag mytagwithmsg -a -m 'This is a tag, with message'
주석과 함께 태그를 나열하려면 -n1
플래그를 사용하여 각 태그 메시지의 한 줄 -n245
을 표시합니다 ( 각 주석의 처음 245 줄을 표시하는 등).
$ git tag -l -n1
mytagwithmsg This is a tag, with message
자세한 내용은 git-tag (1) 매뉴얼 페이지를 참조하십시오.
GIT를 사용한 워크 플로 예.
Git은 매우 유연하고 모든 워크 플로에 적합하지만 특정 워크 플로를 적용하지 않으면 선형 "백업"워크 플로를 넘어 git로 수행 할 수있는 작업과 분기가 얼마나 유용한 지 이해하기 어렵게 만드는 부정적인 영향을 미칠 수 있습니다. .
이 블로그 게시물 은 git을 사용하여 설정하기 매우 쉬운 매우 간단하지만 효과적인 워크 플로를 설명합니다.
블로그 게시물에서 인용 : origin / master를 HEAD의 소스 코드가 항상 프로덕션 준비 상태를 반영하는 주요 분기로 간주합니다.
이 워크 플로는이 워크 플로를 구현하는 프로젝트를 만들만큼 충분히 대중화되었습니다. git-flow
개발시 모든 변경 사항을 적용하고 코드가 프로덕션 상태 일 때만 마스터로 푸시하는 간단한 워크 플로의 멋진 그림 :
이제 새로운 기능 또는 모듈 리팩토링 작업을 원한다고 가정 해 보겠습니다. 우리가 "기능"브랜치라고 부르는 새 브랜치를 만들 수 있습니다. 시간이 걸리고 코드가 깨질 수 있습니다. 기능이 "충분히 안정적"이고 프로덕션에 "가까이"이동하려는 경우 기능 분기를 개발에 병합합니다. 병합 후 모든 버그가 분류되고 코드가 모든 테스트를 확실하게 통과하면 변경 사항을 마스터로 푸시합니다.
이 모든 과정에서 즉시 수정해야하는 끔찍한 보안 버그를 발견하게됩니다. 핫픽스 (hotfixes)라는 분기가있을 수 있습니다.이 분기는 일반 "개발"분기보다 빠르게 프로덕션으로 다시 푸시되는 변경 사항을 적용합니다.
여기에이 기능 / 핫픽스 / 개발 / 프로덕션 워크 플로가 어떻게 생겼는지 보여주는 그림이 있습니다 (블로그 게시물에 잘 설명되어 있습니다. 반복합니다. 블로그 게시물은 전체 프로세스를 저보다 훨씬 더 자세히 설명합니다. .
더 이상 사용할 수없는 PJ Hyett의 게시물 사본은 다음과 같습니다.
힘내는 어렵지 않다
2008 년 11 월 23 일
사람들에게 Subversion보다 Git을 사용해야하는 이유를 말할 때, "Git은 Subversion보다 Subversion을 더 잘 수행하지만 그 이상을 수행합니다."라고합니다.
"더 많이"는 Git을 정말 빛나게하는 많은 것들로 구성되어 있지만 Subversion과 같은 다른 SCM에서 오는 사람들에게는 상당히 압도적 일 수 있습니다.
즉, 전환하는 동안 Subversion을 사용하는 것처럼 Git을 사용하는 것을 막을 수는 없습니다.
필요한 소프트웨어를 설치하고 원격 저장소가 어딘가에 있다고 가정하면 다음과 같이 코드를 가져와 Subversion으로 변경 사항을 다시 푸시 할 수 있습니다.
$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"
Git에서 어떻게할까요?
$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push
Git에서이 작업을 수행하는 명령이 하나 더 있습니다. 이 추가 명령은 큰 의미를 갖지만이 게시물의 목적을 위해 우리가 이야기하는 것은 하나의 추가 명령입니다.
보세요, 그렇게 어렵지 않습니다.
업데이트 : Git과 비교하여 Subversion에서 로컬 복사본을 업데이트하는 것과 동일한 기능이 각각
svn update
및git pull
입니다. 두 경우 모두 단 하나의 명령입니다.
Git 설치 방법
Windows의 경우 :
msysgit 설치
몇 가지 다운로드가 있습니다.
- 힘내 : 아래의 다른 옵션 중 하나가 특별히 필요한 경우가 아니라면 이것을 사용하십시오.
- PortableGit : PC에 설치하지 않고 PC에서 Git을 실행하려는 경우 사용합니다 (예 : USB 드라이브에서 Git 실행).
- msysGit : Git 자체를 개발하려는 경우 사용합니다. 당신은 단지에 대한 힘내을 사용하려면 사용자의 소스 코드,하지만 편집하지 않으려는 망할 놈의 소스 코드, 당신이 필요하지 않습니다.
이것은 또한 Cygwin bash 쉘을 설치하므로 git
더 좋은 쉘 (cmd.exe보다)에서를 사용할 수 있으며 git-gui ( git gui
명령 또는 Start > All Programs > Git
메뉴 를 통해 액세스 가능)도 포함 합니다.
맥 OS X
사용 자식-OSX-설치 , 또는 당신은 또한 소스에서 설치할 수 있습니다
패키지 관리자를 통해
git
기본 패키지 관리자를 사용하여 설치 하십시오. 예를 들어 Debian (또는 Ubuntu)의 경우 :
apt-get install git-core
또는 Mac OS X에서 MacPorts 를 통해 :
sudo port install git-core+bash_completion+doc
… 또는 fink :
fink install git
… 또는 Homebrew :
brew install git
Fedora와 같은 Red Hat 기반 배포 :
yum install git
Cygwin에서 Git 패키지는 "devel"섹션에서 찾을 수 있습니다.
소스에서 (Mac OS X / Linux / BSD / etc.)
Mac OS X에서 개발자 도구가 설치되어 있으면 소스에서 Git을 매우 쉽게 컴파일 할 수 있습니다. A와 망할 놈의 최신 버전을 다운로드 .tar.bz
하거나 .tar.gz
에서 http://git-scm.com/ 하고 압축을 풉니 다 (Finder에서 더블 클릭)
Linux / BSD / 등에서. 거의 동일해야합니다. 예를 들어, 데비안 (우분투)에, 당신은 설치해야합니다 build-essential
통해 패키지를 apt
.
그런 다음 터미널 cd
에서 파일을 추출한 위치 (실행 중이 cd ~/Downloads/git*/
어야 함)를 실행 한 다음 실행하십시오.
./configure && make && sudo make install
이 기본 위치에 힘내를 설치합니다 ( /usr/local
- 그렇게 git
될 것이다 /usr/local/bin/git
)
암호 ( sudo
) 를 입력하라는 메시지 가 표시 /usr/local/
됩니다. 이는 "root"사용자 만 액세스 할 수 있는 디렉토리에 쓸 수 있도록하기위한 것이므로 sudo가 필요합니다!
별도의 위치에 설치해야하는 경우 (Git의 파일이 다른 도구와 혼합되지 않음) --prefix
configure 명령과 함께 사용 하십시오.
./configure --prefix=/usr/local/gitpath
make
sudo make install
그러면 git
바이너리 가에 설치 됩니다 /usr/local/bin/gitpath/bin/git
. 따라서 매번 입력 할 필요가 없습니다 $PATH
. 다음 줄을 추가하여 추가해야 합니다 ~/.profile
.
export PATH="${PATH}:/usr/local/bin/gitpath/bin/"
sudo 액세스 권한이없는 경우 --prefix=/Users/myusername/bin
홈 디렉토리를 사용 하여 설치할 수 있습니다 . 추가 ~/bin/
하는 것을 잊지 마십시오$PATH
x-git-update-to-latest-version 스크립트 는 많은 것을 자동화합니다.
이 스크립트는 git repo (localy at
~/work/track/git
) 의 로컬 복제본을 업데이트 한 다음 심볼릭 링크 를 구성, 설치 (/usr/local/git
-git describe
) 및 업데이트합니다/usr/local/git
.이 방법은, 내가 가질 수
/usr/local/git/bin
내에서PATH
나는 항상 최신 버전을 사용하고 있습니다.이 스크립트의 최신 버전은 매뉴얼 페이지도 설치합니다. 디렉토리
MANPATH
를 포함 하도록 조정해야 합니다/usr/local/git/share/man
.
힘내 재설정
끌어 당기고 코드에 병합하고 마음에 들지 않는다고 결정한다고 가정 해 보겠습니다. git-log 또는 tig를 사용하고, 돌아가고 싶은 곳 (아마도 풀 / 병합 전 마지막 커밋)의 해시를 찾아 해시를 복사하고 다음을 수행합니다.
# Revert to a previous commit by hash:
git-reset --hard <hash>
해시 대신 HEAD ^ 를 이전 커밋의 바로 가기로 사용할 수 있습니다 .
# Revert to previous commit:
git-reset --hard HEAD^
공유 팀 저장소를 어떻게 설정합니까?
일반 리포지토리 를 설정하는 방법 은 여기 에 설명되어 있습니다 .하지만 모두가 가져오고 푸시 할 수있는 팀 리포지토리를 어떻게 설정합니까?
공유 NFS 파일 시스템 사용
예를 들어 팀에 이미 사용할 수있는 공유 그룹 멤버십이 있다고 가정합니다.
mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared
이 저장소 사용을 시작하려면 가장 쉬운 방법은 이미 사용하고있는 로컬 저장소에서 시작하는 것입니다.
cd your/local/workspace/project
git remote add origin /your/share/folder/project.git
git push origin master
다른 사람들은 이제 이것을 복제하고 작업을 시작할 수 있습니다.
cd your/local/workspace
git clone /your/share/folder/project.git
SSH 사용
대상 서버에서 사용자 계정을 설정하십시오. 암호가없는 계정, 암호가있는 계정 또는 사용 authorized_keys
여부는 필요한 보안 수준에 따라 다릅니다. 한 번 봐 가지고 SSH를 통해 구성 힘내 좀 더 많은 정보를.
모든 개발자가이 공유 저장소에 액세스하는 데 동일한 계정을 사용하는 경우 --shared
위와 같은 옵션 을 사용할 필요가 없습니다 .
위와 같은 방법으로 저장소를 초기화 한 후 다음과 같이 초기 푸시를 수행합니다.
cd your/local/workspace/project
git remote add origin user@server:/path/to/project.git
git push origin master
위와 유사점이 보이십니까? 추가로 발생할 수있는 유일한 일은 계정에 비밀번호가있는 경우 SSH가 비밀번호를 요청하는 것입니다. 암호가없는 계정에서이 메시지가 표시되면 SSH 서버가 비활성화되었을 수 PermitEmptyPasswords
있습니다.
이제 복제는 다음과 같습니다.
cd your/local/workspace
git clone user@server:/path/to/project.git
git status
당신의 친구입니다. 자주 사용하세요. 다음과 같은 질문에 답하기에 좋습니다.
- 그 명령이 방금 뭘했을까요?
- 나는 어떤 지점에 있습니까?
- 어떤 변화를 저 지르려고하는데 잊은 것이 있습니까?
- 이 프로젝트를 마지막으로 작업 할 때 (몇일, 몇 주 또는 몇 달 전) 작업 중 이었습니까?
예 svn status
를 git status
들어과 달리 대규모 프로젝트에서도 거의 즉시 실행됩니다. 나는 종종 git이 그것을 자주 사용하는 것을 배우는 동안 안심하고 무슨 일이 일어나고 있는지에 대한 내 정신 모델이 정확한지 확인했습니다. 이제는 마지막 커밋 이후로 변경 한 사항을 기억하기 위해 주로 사용합니다.
.gitignore가 제대로 구성되어 있으면 훨씬 더 유용합니다.
변경 사항 커밋
파일을 편집 한 후에는 변경 사항을 git에 커밋해야합니다. 이 명령을 실행하면 커밋 메시지를 요청합니다.이 메시지는 변경 한 내용을 모든 사람에게 알려주는 간단한 텍스트입니다.
$ git commit source/main.c
./source/ 디렉토리에있는 main.c 파일을 커밋합니다.
$ git commit -a # the -a flag pulls in all modified files
변경된 모든 파일을 커밋합니다 (새 파일이 아니라 git-add를 사용하여 색인에 추가해야 함). 특정 파일 만 커밋하려면 먼저 git-add를 사용하여 준비한 다음 -a 플래그없이 커밋해야합니다.
커밋은 원격 저장소가 아닌 로컬 저장소 만 변경합니다. 커밋을 원격 저장소로 보내려면 푸시를 수행해야합니다.
$ git push <remote> <branch> # push new commits to the <branch> on the <remote> repository
CVS 또는 SVN에서 온 누군가에게는 중앙 저장소에 대한 커밋에 이제 두 단계가 필요하기 때문에 이것은 변경입니다.
어떻게 분기합니까?
git 저장소의 기본 브랜치는 master
.
새 지사를 만들려면
git branch <branch-name>
현재 저장소 유형의 모든 분기 목록을 보려면
git branch
다른 지점으로 전환하려면 다음을 사용할 수 있습니다.
git checkout <branch-name>
새 분기를 만들고 한 단계로 전환하려면
git checkout -b <branch-name>
브랜치를 삭제하려면
git branch -d <branch-name>
현재 브랜치의 변경 사항으로 브랜치를 생성하려면
git stash
git stash branch <branch-name>
최신 코드 얻기
$ git pull <remote> <branch> # fetches the code and merges it into
# your working directory
$ git fetch <remote> <branch> # fetches the code but does not merge
# it into your working directory
$ git pull --tag <remote> <branch> # same as above but fetch tags as well
$ git fetch --tag <remote> <branch> # you get the idea
원격 저장소에서 코드의 최신 사본을 가져 오는 모든 경우에 해당됩니다.
프로 힘내 무료 책은 특히 초보자를위한, 확실히 내가 가장 좋아하는 것입니다.
Git Magic 만 있으면됩니다. 보장 또는 환불!
분기를 어떻게 병합합니까?
분기를 병합하려면 (예 : master
로 release
) 현재 분기가 병합하려는 대상 분기인지 확인하십시오 (현재 분기를 사용 git branch
하거나 git status
확인).
그런 다음
git merge master
(여기서는 master
현재 분기와 병합하려는 분기의 이름입니다).
충돌이 있으면 다음을 사용할 수 있습니다.
git diff
해결해야하는 보류중인 충돌을 보려면
나는 또한 Git 내부 가 매우 유용하다는 것을 발견했습니다 . Scott Chacon (Pro Git의 저자이자 Git Community Book의 관리자)이 작성했습니다. 내가 Git 내부에 대해 좋아하는 점 은 먼저 개념에 초점을 맞춘 다음 명령에 초점을 맞추고 있으며, 약 100 개의 작은 페이지이므로 빠르게 소화 할 수 있다는 것입니다.
파일 수정 내역을 어떻게 봅니까?
git log -- filename
원격 지점을 추적하는 방법
로컬 리포지토리를 복제 한 원격 리포지토리가 있고 해당 원격 리포지토리에 'some_branch'라는 브랜치가 있다고 가정하고 로컬에서 추적하는 방법은 다음과 같습니다.
# list remote branches
git branch -r
# start tracking one remote branch
git branch --track some_branch origin/some_branch
# change to the branch locally
git checkout some_branch
# make changes and commit them locally
....
# push your changes to the remote repository:
git push
Git의 작동 방식을 이해하는 데 좋은 논문은 The Git Parable 입니다. 매우 좋습니다!
파일의 두 버전을 비교하거나 현재 파일과 이전 버전을 어떻게 비교합니까?
비교 명령은 git diff
입니다.
파일의 두 버전을 비교하려면 :
$ git diff <commit1> <commit2> <file_name>
이는 commit1과 commit2를 비교합니다. 순서를 변경하면 파일이 반대 방향으로 비교됩니다. 예상과 다를 수 있습니다.
현재 준비된 파일을 저장소와 비교하려면 다음을 수행하십시오.
$ git diff --staged <file_name>
현재 준비되지 않은 파일을 저장소와 비교하려면 :
$ git diff <file_name>
왜 또 다른 하우투? 시작하기에 완벽한 git 가이드 와 같이 인터넷에는 정말 좋은 것들이 있습니다 . 기여할 수 있고 (git 허브에 호스팅 됨)이 공동 작업에 완벽한 git 책 을 포함하여 좋은 링크가 있습니다.
stackoverflow에서 가장 좋아하는 트릭을보고 싶습니다!
제가 최근에 발견 한 광산은 여기 에 git stash
설명 되어 있습니다. 현재 작업을 저장하고 다른 지점으로 이동할 수 있습니다.
편집 : 이전 게시물과 같이 위키로 게시물이있는 stackoverlow 형식을 정말로 선호한다면이 답변을 삭제합니다
콘솔 UI-Tig
설치:
apt-get install tig
용법
git repo 안에있는 동안 'tig'를 입력하고 대화 형 로그를 보려면 로그에서 'enter'를 눌러 자세한 정보를 확인하십시오. h 는 기본 기능을 나열하는 도움말입니다.
하찮은 일
"Tig"는 거꾸로 "Git"입니다.
원격 저장소에 분기를 생성하려면 어떻게해야합니까?
단일 원격 저장소에서 원격 저장소를 복제했다고 가정합니다.
# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files
# ...
# Commit your changes locally
git add fileName
git commit -m Message
# push changes and new branch to remote repository:
git push origin name_of_branch:name_of_branch
나는 공식 Git 튜토리얼을 시작했다 . 초보자에게도 충분히 실용적이라고 생각합니다 (당신의 정의에 따르면 저는 초보자 였지만 아직은 초보자였습니다! 저는 메이크 파일을 거의 파악하지 못했으며 Apache Subversion 등으로 약간만 플레이했습니다).
원격 저장소에서 브랜치를 어떻게 삭제합니까?
:
브랜치 이름 앞에 사용하여 리모컨에서 푸시를 수행하십시오.
git push origin :mybranchname
되는 origin
원격의 이름과 mybranchname
삭제 될 대해 분기의 이름
http://help.github.com/remotes/
푸시 및 풀 변경
단순화 된 방식으로, 그냥 git push
하고 git pull
. 변경 사항이 병합되고 충돌이 발생하면 git이 알려줄 것이며 수동으로 해결할 수 있습니다.
원격 저장소로 처음 푸시 할 때 수행해야합니다 git push origin master
(마스터가 마스터 브랜치 임). 그때부터 git push
.
으로 태그를 밀어 넣습니다 git push --tags
.
코드 확인
먼저 빈 디렉토리로 이동하여 "git init"를 사용하여 저장소로 만든 다음 원격 저장소를 자신의 저장소에 복제합니다.
git clone user@host.com:/dir/to/repo
처음 복제하는 곳은 기본적으로 "git pull"이 가져 오는 곳입니다.
Gity : http://macendeavor.com/gity
참고 URL : https://stackoverflow.com/questions/315911/git-for-beginners-the-definitive-practical-guide
'your programing' 카테고리의 다른 글
Bash 스크립트에서 클립 보드로 /로부터 파이프 (0) | 2020.09.28 |
---|---|
null이 객체 인 이유는 무엇이며 null과 undefined의 차이점은 무엇입니까? (0) | 2020.09.28 |
각 그룹의 마지막 레코드 검색-MySQL (0) | 2020.09.28 |
Mockito로 void 메서드를 모의하는 방법 (0) | 2020.09.28 |
grep, 특정 파일 확장자 만 (0) | 2020.09.28 |