'git 수정사항 확인'에 해당되는 글 2건

  1. 2015.01.14 git 수정사항 확인
  2. 2014.09.20 형상관리 툴 - (1) git
2015. 1. 14. 14:43

- 수정사항 확인 (작업 폴더와 Staging Area 비교)

$ vi benchmarks.rb

... mobilehunter.net 추가 ...

$ git diff

diff --git a/benchmarks.rb b/benchmarks.rb

index 3e64fc3..6a3bb89 100644

--- a/benchmarks.rb

+++ b/benchmarks.rb

@@ -6,6 +6,7 @@ require 'ruby-prof'

 require 'memcache'

 require 'pp'

 

+mobilehunter.net

 

 #require 'grit'

 require 'lib/grit'


- 수정사항 확인 (Staging Area와 로컬 저장소 비교)

$ git diff --chached  or $ git diff --staged

diff --git a/README b/README

new file mode 100644

index 0000000..76e579a

--- /dev/null

+++ b/README

@@ -0,0 +1,2 @@

+test

+

diff --git a/benchmarks.rb b/benchmarks.rb

index e445e28..3e64fc3 100644

--- a/benchmarks.rb

+++ b/benchmarks.rb

@@ -1,3 +1,4 @@

+

 require 'fileutils'

 require 'benchmark'

 require 'rubygems'



'개발 거들기' 카테고리의 다른 글

소스를 블로그에 올릴 때  (0) 2016.05.12
ATOM에서 TODO관리하기  (0) 2015.12.21
git 로컬 저장소 생성(.git 폴더)  (0) 2015.01.14
Ubuntu에 Apache + Tomcat + MySQL 설치  (0) 2014.10.24
형상관리 툴 - (1) git  (0) 2014.09.20
Posted by 모바일헌터
2014. 9. 20. 02:42

소프트웨어를 개발할 때 개발자들에게 가장 큰 골치거리 중에 하나가 소스의 관리이다.  혼자 개발을 해도 관리가 어려운데 실제 직장에서는 혼자 개발할 수 있는 프로그램은 그렇게 많지 않아 항상 여러 명의 개발자가 공동 작업을 하게 되고 따라서 소스의 관리는 무엇보다 중요한 업무 중에 하나가 된다.

무슨 파일이 어떤 목적을 위해서 수정되었는지에 대해한 상세 기록을 통해서 소스의 수정사항들을 추적하고 관리할 수 있도록 도와주는 형상관리 툴은 개발을 진행하는 상황에서도 손쉽게 특정 소스에서 일부 버그만을 수정한 핫픽스 버전을 발행하는 등 다양한 소스 관리 방법도 제공을 한다.

다양한 형상관리 툴이 존재하지만 git은 리누스 토르발스가 리눅스 커널 개발에 이용하려고 개발하였으며 현재 널리 사용되고 있다. git은 많은 부분에서 cvs나 svn과 같은 다른 형상관리 툴과 기능은 비슷하지만 로컬 저장소(Local Repository)만 혹은 로컬 저장소와 원격 저장소(Remote Repository)를 함께 사용할 수 있다는 큰 특징을 갖고 있다. 네트워크에 접근하거나 중앙서버에 의존하지 않고 로컬에서 작업할 수 있다는 점은 특정 서버를 운영하지 않아도 된다는 장점이 있다. 또한, 인텍스(Index)라고 부르는 스테이징 영역(Staging Area)이 존재한다.  로컬 저장소에 커밋 할 파일들을 스테이지 영역에 추가하여 관리할 수 있다. 이러한 스테이징 영역과 스냅샷/브랜치를 잘 활용할 수 있다면 git을 제대로 사용하고 있다고 말할 수 있을 것이다.  그렇지 않다면 굳이 git을 사용해야 하는 이유는 없다.  


< 기본 명령어 정리>

- clone : 다른(로컬/원격) 저장소를 새로운 폴더에 복사 (작업폴더/로컬저장소가 생성)

- add : 작업내용을 스테이징 영역(Index)에 추가

- commit : 로컬 저장소에 작업내용을 기록

- push : 로컬 저장소의 내용을 원격 저장소

- fetch : 다른 (로컬/원격) 저장소로 부터 작업 내용을 내려받기

- merge : 내려 받은 데이터를 병합

- pull : 다른 저장소로 부터 작업 내용을 내려받고 다른 저장소 혹은 브랜치에 병합

- checkout : 브랜치를 선택하여 작업영역에 선택된 브랜치를 반영한다.

- brach : 브랜치들을 확인하고 특정 브랜치를 생성하고 삭제한다.

- cerry-pick : 다른 브랜치의 특정 commit내용을 가져온다.

- reset : 현재 HEAD를 특별한 상태로 리셋한다.





로컬 저장소 생성(.git 폴더)

- 기존 디렉토리를 Git 저장소로 만들기 

$ git init 

Initialized empty Git repository in /Users/mobilehunter/Developments/git-test/.git/


- 기존 저장소를 Clone하기

$ git clone [username]@[host]:[/remote/repository/location] 


git clone git://github.com/schacon/grit.git mygrit

Cloning into 'mygrit'...

remote: Counting objects: 4051, done.

remote: Compressing objects: 100% (2824/2824), done.

remote: Total 4051 (delta 1170), reused 4051 (delta 1170)

Receiving objects: 100% (4051/4051), 2.10 MiB | 508.00 KiB/s, done.

Resolving deltas: 100% (1170/1170), done.

Checking connectivity... done.


$ git clone [/local/repository/location]

git clone ~/Developments/git-test/mygrit

Cloning into 'mygrit'...

done.  


- 파일의 상태 확인하기

$ git status 

On branch master

Your branch is up-to-date with 'origin/master'


nothing to commit, working directory clean



clone에 의해서 작업폴더가 복사 되었거나 checkout에 의해서 작업 폴더가 생성되었을 때 모든 파일은 관리되며(tracked) 수정되지 않은(unmodified) 파일들로 구성된다. 새롭게 생성되는 파일(이나 로컬저장소에서 삭제된 파일)은 관리가 되지 않는 (untracked)파일이며, 관리가 되는 파일 중 수정이 이루어 지면 수정된(modified)파일이 된다.  수정된 파일 중  add명령에 의해서  스테이지 영역에 인덱스가 생성되어 커밋 명령에 의해서 로컬 저장소에 기록될(staged) 파일이 되며 tracked된다. commit에 의하여 staged 파일이 로컬 저장소에 반영되면 unmodified 파일이 된다.


- 파일 생성 (새로운 파일을 생성 - untracked file)

$ vi README

... 파일 생성/저장

$ git status

On branch master

Your branch is up-to-date with 'origin/master'


untracked files:

   (use "git add <file>..." to include in what will be committed)


           README


nothing added to commit but untracked files present (use "git add" to track)


- 파일 추가 (생성된 파일 staged file)

$ git add README

$ git status

On branch master

Your branch is up-to-date with 'origin/master'.


Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)


          new file:   README 


- 파일 수정 (Tracked파일 중에 파일이 수정 - modified file)

$ vi benchmarks.rb

... test 추가 ...

$ git status

On branch master

Your branch is up-to-date with 'origin/master'.


Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)


          new file:   README


Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)


          modified:   benchmarks.rb 


- 파일 추가 (수정된 파일 - staged file)

$ git add benchmarks.rb

$ git status

Your branch is up-to-date with 'origin/master'.

Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)


          new file:   README

          modifed:   benchmarks.rb


- 수정사항 확인 (작업 폴더와 Staging Area 비교)

$ vi benchmarks.rb

... mobilehunter.net 추가 ...

$ git diff

diff --git a/benchmarks.rb b/benchmarks.rb

index 3e64fc3..6a3bb89 100644

--- a/benchmarks.rb

+++ b/benchmarks.rb

@@ -6,6 +6,7 @@ require 'ruby-prof'

 require 'memcache'

 require 'pp'

 

+mobilehunter.net

 

 #require 'grit'

 require 'lib/grit'


- 수정사항 확인 (Staging Area와 로컬 저장소 비교)

$ git diff --chached  or $ git diff --staged

diff --git a/README b/README

new file mode 100644

index 0000000..76e579a

--- /dev/null

+++ b/README

@@ -0,0 +1,2 @@

+test

+

diff --git a/benchmarks.rb b/benchmarks.rb

index e445e28..3e64fc3 100644

--- a/benchmarks.rb

+++ b/benchmarks.rb

@@ -1,3 +1,4 @@

+

 require 'fileutils'

 require 'benchmark'

 require 'rubygems'


- 변경사항 커밋하기

$ git commit



# Please enter the commit message for your changes. Lines starting

# with '#' will be ignored, and an empty message aborts the commit.

# On branch master

# Your branch is up-to-date with 'origin/master'.

#

# Changes to be committed:

#       new file:   README

#       modified:   benchmarks.rb

#


".git/COMMIT_EDITMSG" 10L, 285C



$ git commit -m "inline message" 


- Staging Area 생략하고 commit하기

 $ git commit -a -m 'added new benchmarks'

[master b703ffc] added new benchmarks

 2 files changed, 4 insertions(+)

 create mode 100644 README 


- 파일 삭제하기

$ rm grit.gemspec

$ git status

On branch master

Changes not staged for commit:

  (use "git add/rm <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)


          deleted:    grit.gemspec


no changes added to commit (use "git add" and/or "git commit -a") 


- 삭제 파일 추가 (삭제된 파일을 Stated 상태가 되게 한다)

$ rm grit.gemspec

$ git status

On branch master

Changes to be committed:

   (use "git reset HEAD <file>..." to unstage)


       delete: grit.gemspec


- 커밋 수정

$ git commit -m 'inital commit'

$ git add forgotten_file

$ git commit --amend 

첫 번째 commit은 무시되며 첫 번째 commit이 두 번째 위치에서 수정된 것과 동일한 결과를 갖는다.


- Unstage하기 (Staged 파일을 Unstage하기)

 $ git reset -- benchmarks.rb : 해당 파일을 index에 추가한 것을 취소하고 작업 폴더의 변경내용은 보전된다

 $ git reset HEAD benchmarks.rb : 위와 동일.


--soft: index보존, 작업폴더 보존

--mixed: index취소, 작업폴더 보존(기본 옵션)
--hard: index취소, 작업폴더 취소


- 수정한 파일 복구하기 (로컬 저장소에서 해당파일 다시 가져오기)

 $ git checkout -- benchmarks.rb              : 작업폴더에서 수정한 파일을 index에 있는 것으로 원복

 $ git checkout HEAD -- benchmarks,rb     : 작업폴더에서 수정한 파일을 HEAD에 있는 것으로 원복

 $ git checkout FETCH_HEAD -- benchmarks.rb : 작업폴더에서 수정한 파일을 FETCH_HEAD에 있는 것으로 원복


- 작업폴더 복구하기

 $ git reset --hard HEAD  : 작업폴더를 마지막 커밋 상태로 되돌림. 마지막 커밋 이후의 작업폴더와 index의 

                                           수정사항이 모두 삭제됨

 $ git checkout HEAD .     : 

 $ git checkout -f             : 


<원격 저장소관련>

- 원격 저장소 정보 관리

$ git remote -v

$ git remote add [단축이름] [원격 서버 주소] 


원격 저장소로부터 데이터를 가져오기 
(원격 저장소에서 데이터를 로컬 저장소로 갖고 온다.)

$ git fetch [remote-name] 


원격 저장소로부터 데이터를 가져오기 
(원격 저장소에서 데이터를 로컬 저장소로 갖고 오고 작업폴더와 머지까지 한다.)

$ git pull [remote-name] 


원격 저장소에 데이터 보내기 

(원격 origin 서버로 현재 master branch의 내용을 push)

$ git push origin master  (또는 git push)


원격 저장소 정보 확인/수정/삭제

$ git remote show [원격 저장소 이름] 

$ git remote rename [기존명] [신규명]

$ git remote rm [원격 저장소 이름]


원격 저장소를 옮기기

$ git remote rm origin

$ git remote add origin git@github.com:mobilehunter/{projectname}.git

 



- untracked 파일 제거

 $ git clean -f

 $ git clean -f -d  : 폴더까지 제거


- 파일무시: 생성/수정되더라도 관리되지 않는 파일이라고 표기 하지 않고 무시하기 위해서  .gitignore 파일에 추가

$ vi .gitignore

Debug 폴더를 무시하고 싶다면 다음과 같이 추가하여야 한다.

Debug/ 

run/


.gitignore에 표기하지 않고 git이 추적하지 못하도록(untracked 파일)하려면 staging area에서만 삭제하면 된다.

※ $ git rm --cached readme.txt


- 로그 확인

  $ git log 

  $ git log --pretty=oneline

  $ git log -p -2                    => -p 각 커밋의 diff결과를 보여준다. -2는 최근 2개의 결과


-태그 조회하기

$ git tag

$ git tag -l 'v1.4.2.*'

$ git show v1.4


-태그 붙이기(-a)

$ git tag -a v1.4 -m 'my version 1.4'


-태그에 서명하기(-s)

$ git tag -a v1.5 -m 'my signed 1.5 tag'


※ 태그와 브랜치를 혼동하는 사람이 있다. 태그는 일정 과거 시점을 표시하고 그 시점으로 쉽게 이동을 하거나 브랜치 혹은 특정 태그와의 비교 작업을 용이하게 할 수 있다.

다음의 





- remote branch를 가져오기

 $ git branch -b local_branch_name remote_branch_name

$ git branch -b next origin/next  

(local branch의 이름을 remote와 동일하게 하고 싶을 경우)

or 

$ git branch -b next_local origin/next

(local 브랜치의 이름을 변경하고 싶을 경우)


- branch 이름 변경

 $ git branch -m old_branch_name new_branch_name


- git의 전체 환경설정

git을 사용하기 전에 몇가지 전역 값을 설정하는 것이 편리하다. 우선, 첫번째는 이름과 이메일이다.

  $ git config --global user.name ["name"]

  $ git config --global user.email ["email"]


$ git config --global core.editor [vi]


color.ui값을 "auto"로 설정하여 여러 색을 이용한 출력 결과를 터미널에서 확인할 수 있다.

$ git config --global color.ui true


$ git config format.pretty oneline


설정값들이 제대로 잘 저장되었는지 확인해보자

  $ git config --global --list 


※ Staging Area = Index = Git Index



삼성 오픈소스 컨퍼런스에서 서울대 박성재님이 발표했던 내용입니다.




'개발 거들기' 카테고리의 다른 글

소스를 블로그에 올릴 때  (0) 2016.05.12
ATOM에서 TODO관리하기  (0) 2015.12.21
git 로컬 저장소 생성(.git 폴더)  (0) 2015.01.14
git 수정사항 확인  (0) 2015.01.14
Ubuntu에 Apache + Tomcat + MySQL 설치  (0) 2014.10.24
Posted by 모바일헌터