Git 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
1번째 줄: 1번째 줄:
https://git-scm.com/
 
 
 
==config==
 
==config==
설정 내용을 확인하고 변경할 수 있다.
+
해당프로젝트에 설정
 
 
# <code>/etc/gitconfig</code> : 시스템의 모든 사용자와 모든 저장소에 적용되는 설정이다. <code>git config --system</code> 옵션으로 이 파일을 읽고 쓸 수 있다.
 
# <code>~/.gitconfig</code> : 현재 사용자. <code>git config --global</code>
 
# <code>.git/config</code> : 해당 폴더. <code>git config --local</code>
 
 
 
설정은 local>global>system 순으로 우선시 된다. 범위 지정이 없으면 local로 설정된다.
 
 
 
다음 명령을 사용하여 설정파일 위치를 확인할 수 있다. gitbash에서는 위의 경로를 사용할 수 있다.
 
$ git config --list --show-origin
 
 
 
=== 사용자 정보(user) ===
 
 
  $ git config user.name "[사용자명]
 
  $ git config user.name "[사용자명]
 
  $ git config user.email "[이메일주소]"
 
  $ git config user.email "[이메일주소]"
--global 을 추가하면 현재 사용자에 대해 설정된다.
+
전역적으로 설정하는 경우에 --global 을 추가한다.
 
 
=== 자격(credential) ===
 
$ git config --global credential.https://github.com<nowiki/>.provider generic
 
<syntaxhighlight lang="ini">
 
[credential "https://github.com"]
 
        provider = generic
 
</syntaxhighlight><code>generic</code> 자격 증명 공급자는 플랫폼에 독립적인 방식으로 자격 증명을 저장하고 검색하는 데 사용됩니다. 그러나 <code>generic</code> 공급자의 구현은 특정한 공급자나 플랫폼에 따라 다릅니다.
 
 
 
윈도우에서 기본값은 <code>manager-core</code>인데, Windows Credential Manager를 사용하게 되는데, GUI가 포함되어 있으므로 스크립트를 사용하는 경우에 중단될 수 있다. 
 
 
 
<code>store</code>는 디스크에 암호화하지 않고 저장하므로 권장되지 않는다.
 
  
 
== clone ==
 
== clone ==
 
새로운 디렉토리에 다른 repository를 복제한다.
 
새로운 디렉토리에 다른 repository를 복제한다.
 
--recurse-submodules 옵션을 붙이면 서브모듈을 자동으로 초기화하고 업데이트한다.
 
  
 
== init ==
 
== init ==
56번째 줄: 30번째 줄:
 
== pull ==
 
== pull ==
 
다른 repository 또는 로컬 브랜치에서 가져와서 통합한다.
 
다른 repository 또는 로컬 브랜치에서 가져와서 통합한다.
 
[[Git#fetch|fetch]]와 merge를 한번에 실행한 것과 같다.
 
  
 
git init으로 로컬 저장소만 만든 후에 git remote add로 원격 저장소를 추가하여 트래킹 정보가 없는 경우에는 다음 명령을 사용할 수 있다. <syntaxhighlight lang="bash">
 
git init으로 로컬 저장소만 만든 후에 git remote add로 원격 저장소를 추가하여 트래킹 정보가 없는 경우에는 다음 명령을 사용할 수 있다. <syntaxhighlight lang="bash">
68번째 줄: 40번째 줄:
  
 
== branch ==
 
== branch ==
List, create, or delete branches
 
 
If <code>--list</code> is given, or if there are no non-option arguments, existing branches are listed;
 
 
''git branch'' [--track[=(direct|inherit)] | --no-track] [-f] [--recurse-submodules] <branchname> [<start-point>]
 
 
The command’s second form creates a new branch head named <branchname> which points to the current <code>HEAD</code>, or <start-point> if given.
 
  
 
=== --delete ===
 
=== --delete ===
84번째 줄: 49번째 줄:
 
clone, pull은 fetch와 merge가 동시에 일어난다.
 
clone, pull은 fetch와 merge가 동시에 일어난다.
  
최신 리비전을 이름없는 브랜치로 가져온다.
+
최신 리비전을 이름없는 브랜치로 가져온다. 이 브랜치를 '''FETCH_HEAD'''라는 이름으로 체크아웃할 수도 있다. FETCH_HEAD브랜치를 merge하거나 pull하여 통합할 수 있다.  
 
 
이 브랜치를 '''FETCH_HEAD'''라는 이름으로 체크아웃할 수도 있다. FETCH_HEAD브랜치를 merge하거나 fetch하지 않고 [[Git#pull|pull]]하여 통합할 수 있다.  
 
  
 
super-project-pointer라는 이력이 남는다.
 
super-project-pointer라는 이력이 남는다.
94번째 줄: 57번째 줄:
  
 
== submodule ==
 
== submodule ==
서브모듈은 독립적인 저장소이다.
+
서브모듈은 독립적인 저장소이다.  
  
 
메인 프로젝트를 복제한 경우 각 서브모듈별로 업데이트해야 파일을 받는다.
 
메인 프로젝트를 복제한 경우 각 서브모듈별로 업데이트해야 파일을 받는다.
100번째 줄: 63번째 줄:
 
서브모듈을 수정한 경우엔 master branch로 전환한 후 변경사항을 push한 후에 메인 프로젝트를 push해야한다.
 
서브모듈을 수정한 경우엔 master branch로 전환한 후 변경사항을 push한 후에 메인 프로젝트를 push해야한다.
  
=== Command ===
+
=== add ===
With no arguments, shows the status of existing submodules. Several subcommands are available to perform operations on the submodules.
 
 
 
==== add ====
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ git submodule add https://github.com/myid/myproject.git
 
$ git submodule add https://github.com/myid/myproject.git
110번째 줄: 70번째 줄:
 
서브모듈의 버전(해시)은 별도의 파일에 저장된다. 메인모듈을 새로 clone하는 경우 서브모듈은 clone되지 않는다. 추가명령으로 받아야 한다.
 
서브모듈의 버전(해시)은 별도의 파일에 저장된다. 메인모듈을 새로 clone하는 경우 서브모듈은 clone되지 않는다. 추가명령으로 받아야 한다.
  
==== init ====
+
=== init ===
먼저 git submodule init 명령을 실행하면 서브모듈 정보를 기반으로 로컬 환경설정 파일이 준비된다. 이후 git submodule update 명령으로 서브모듈의 리모트 저장소에서 데이터를 가져오고 서브모듈을 포함한 프로젝트의 현재 스냅샷에서 Checkout 해야 할 커밋 정보를 가져와서 서브모듈 프로젝트에 대한 Checkout을 한다.
+
서브모듈을 초기화해 준다. (git init과 동일)
  
간단하게 실행하는 방법도 있다. 메인 프로젝트를 clone할 때 [[Git#clone|git clone]] 명령 뒤에 --recurse-submodules 옵션을 붙이면 서브모듈을 자동으로 초기화하고 업데이트한다.
+
=== update ===
 
 
==== update ====
 
 
원격 저장소에서 파일을 가져온다. 최신버전을 가지고 오는 것이 아니다.
 
원격 저장소에서 파일을 가져온다. 최신버전을 가지고 오는 것이 아니다.
  
 
메인모듈의 ''.git/modules/sub-module/HEAD''에 저장된 커밋 해시의 리비전을 가지고 온다.  
 
메인모듈의 ''.git/modules/sub-module/HEAD''에 저장된 커밋 해시의 리비전을 가지고 온다.  
  
--remote 옵션으로 최신버전을 가지고 온다.
 
$ git submodule --remote
 
--recursive 옵션으로 여러 서브모듈에 대해서 업데이트할 수 있다.
 
$ git submodule update --remote --recursive
 
 
브랜치를 가지지 않는다.
 
브랜치를 가지지 않는다.
  
메인모듈을 clone한 후에 update --init명령으로 서브모듈을 다운로드할 수 있다.<syntaxhighlight lang="bash">
+
메인모듈을 clone한 후에 init후 update명령으로 서브모듈을 다운로드할 수 있다.<syntaxhighlight lang="bash">
$ git submodule update --init
+
$ git submodule init
 +
$ git submodule update
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== deinit ===
+
=== 서브모듈 수정 ===
$ git submodule deinit [모듈]
+
master로 checkout하지 않고 서브모듈을 수정했다면 변경사항을 commit하고 다음 명령으로 변경사항을 유지한 채 새 브랜치를 생성한다.
.git/modules와 소스폴더 삭제
+
  $ git branch <new-branch-name> f496c73
$ rm -rf .git/modules/[모듈]
 
 
 
$ rm -rf [모듈]
 
 
 
=== 서브모듈의 버전 관리 ===
 
master로 checkout하지 않고 서브모듈을 수정했다면 변경사항을 commit하고(HEAD의 hash가 변경됨) 다음 명령으로 임시 branch를 생성하되, <start-point>(f496c73)를 주어 변경사항을 유지한 채 새 브랜치를 생성한다.
 
  $ git [[Git#branch|branch]] <new-branch-name> f496c73
 
 
<new-branch-name> 이름을 일시적으로 사용한다면 temp정도를 사용할 수 있다. master로 체크아웃한 후에 merge한다.<syntaxhighlight lang="bash">
 
<new-branch-name> 이름을 일시적으로 사용한다면 temp정도를 사용할 수 있다. master로 체크아웃한 후에 merge한다.<syntaxhighlight lang="bash">
 
$ git checkout master
 
$ git checkout master
 
$ git merge temp
 
$ git merge temp
 
</syntaxhighlight>임시 브랜치를 삭제하려면 git [[Git#branch|branch]]명령을 사용할 수 있다.
 
</syntaxhighlight>임시 브랜치를 삭제하려면 git [[Git#branch|branch]]명령을 사용할 수 있다.
 
=== 외부링크 ===
 
https://git-scm.com/book/ko/v2/Git-도구-서브모듈
 
 
== Git Hooks ==
 
https://git-scm.com/book/ko/v2/Git맞춤-Git-Hooks
 
 
.git/hooks가 기본 디렉토리이다.
 
 
=== 훅 설치하기 ===
 
실행만 할 수 있으면 된다.
 
 
실행할 수 있는 스크립트 파일을 확장자 없이 저장소의 hooks 디렉토리에 넣으면 스크립트가 켜진다.
 
 
== Git 내부 ==
 
 
=== 환경변수 ===
 
 
==== 디버그 관련 변수 ====
 
 
===== GIT_TRACE =====
 
 
* “true”, “1”, “2” – stderr 표준에러출력으로 Trace 로그를 출력함(1 이상 10 이하의 숫자는 해당 FD로 출력함).
 
 
==== 잡동사니 변수 ====
 
 
===== GIT_SSH =====
 
Git이 SSH 리모트로 연결할 때 <code>ssh</code> 명령 대신 설정된 명령을 사용한다. GIT_SSH_COMMAND="ssh -v"
 
 
혹은, [[SSH#ssh config|SSH 설정]]에서 변경할 수 있다.
 
 
[[분류:명령어]]
 
[[분류:명령어]]
 
[[분류:프로그래밍]]
 
[[분류:프로그래밍]]

wwiki에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 Wwiki:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)