ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git 좋네요
    카테고리 없음 2020. 1. 27. 10:09

    Git>Documentation>book 2.2 Git의 기초 ​ 2.2 Git의 기초-수정하고 탱크에 저장하 ​ 1. 수정하고 탱크에 저장한 워킹 디렉토리의 모든 파 1은 큰 Tracked(관리 대상입니다)과 Untracked(관리 대상이 없음)에 자신 느탄다. Tracked파 1은 이에 앞서고, 스냅 샷에 포함된 파 1이었다 Tracked파 1은 또 Unmodified(수정하지 않습니다소리)와 Modified(수정하고 있는) 그리하여 Staged(커미트먼트와 저장시설에 기록함) 상태 중 하자신이었다. 쉽게 의자 트리하면 Git가 아는 파 1이라는 것이었다 그리고 자신의 멀리 파 1은 전체 Untracked파 1이었다 Untracked파 1은 워킹 디렉토리에 있는 파 1중의 스냅 샷도 Staging Area에 포함되지 않는 파 1이었다 쵸소움의 저장고를 Clone을 하면 모든 파 1은 Tracked이면서 Unmodified상태였다 파 1을 Checkout하고 쟈싱는 아무것도 수정하지 않았기 때문에 그렇다.마지막 관계 후 아직 아무것도 수정하지 않은 상태에서 어떤 파 1을 수정하면 Git은 그 파 1를 Modified상태로 인식할 것이다. 실제로 커밋을 하려면 이 수정한 파 1을 Staged상태로 Staged상태의 파 1을 위탁하는 것이다. 이러한 라이프 사이클을 반복해 계속한다.


    >


    Figure 8. 파 1의 생활 패턴.파 1의 상태 확인 하키(1의 상태를 확인하려면 보통 git status명령을 사용합니다. Clone 한 후에 즉시 이 명령을 실행하면 다음과 같은 메시지를 볼 수 있다.


    위의 내용은 파장을 좋지 못하더라도 수정하지 않았음을 내용으로 해준다. Tracked파의 첫 번째 일부는 좋지 않아도 수정되지 않았다는 뜻이다. Untracked 처음은 아직 없기 때문에 리스트에 나쁘지 않고 나쁘지는 않다. 그리고 현재 작업중인 브런치를 알려주고, 서버의 같은 브런치에서 진행한 작업이 없음을 나쁘지 않게 올린다. 기본 브랜치가 master이기 때문에 현재 브랜치의 이름이 master로 나쁘지는 않다. 프로젝트에 README 파두를 만들어 보자. README 처음에는 새로 만든 처음이므로, git status를 실행하면 "Untracked files"에 들어가 있다:


    README파 1은 "Untracked files"부분이지만 이는 README파 1이 Untracked상태이라는 것을 예기합니다. Git은 Untracked파 1을 아직 스냅 샷(약속)에 넣을 수 없는 파 1이라고 보고 있다. 파 1이 Tracked상태가 되기 전까지는 Git는 절대로 그 파 1을 동의하지 않는다. 그러므로 1 하면서 발발하는 바이너리 파 1 같은 것을 약속한 실수는 하지 않게 된다. README파 1을 추가하고 직접 Tracked상태로 들어 보자.​ 파 1을 새롭게 추적하는 ​ git add명령으로 파 1을 새롭게 추적할 수 있다. 하명령을 실행하면 Git은 README파 1을 추적합니다.


    그리드 상태 명령을 다시 실행하면 README 파일이 Tracked 상태이면서 커밋에 추가되는 Staged 상태임을 확인할 수 있다.


    "Changesto be committed"에 들어 있는 파일은 Staged 상태임을 의미한다. 커밋하면 gitadd를 실행한 시점의 파일이 커밋되고 저장소의 히스토리에 남는다. 앞에서 git init 명령을 실행한 후 git add (files) 명령을 실행하였음을 기억할 터였다. 이 명령에 의해 디렉토리에 있는 파일을 추적·관리한다. 그리드 명령은 파일 또는 디렉토리의 경로를 어규먼트에서 받는다. 디렉토리라면 아래에 있는 모든 파일까지 재귀적으로 추가한다.Modified 상태의 파일을 Stage 하기 전에 Tracked 상태의 파일을 수정하는 방법을 보자. CONTRIBUTING.md 라는 파일을 수정해서 나쁘지는 않으므로, 그리드 명령을 다시 실행하면, 결과는 다음과 같다.


    이 CONTRIBUTING.md파 1은 "Changes not staged for commit"에 있다. 이것은 수정한 파 1이 Tracked상태지만 아직 Staged상태가 아니라는 것. Staged 상태로 하려면 gitadd 명령을 실행해야 한다. git add명령은 파 1을 새롭게 추적할 때도 사용하고 수정한 파 1을 Staged상태로 할 때에도 사용한다. Merge 할 때 충돌한 상태의 파 1을 Resolve상태로 할 때에도 사용한다. add의 의미는 프로젝트에 파 1을 추가한다기보다는 이후 커밋에 추가하면 받아들이는 것이 좋다. git add명령을 실행하고 CONTRIBUTING.md파 1을 Staged상태로 git status명령으로 결과를 살펴보자.


    두 파 하나 모두 Staged 상태이므로 이후 코밋에 포함된다. 그러나 아직은 더 수정해야 한다는 것을 알고 당장 커밋할 수 없는 상황이 됐다고 소견해 보자. 이 정세로 CONTRIBUTING.md 화나를 열어 수정합니다. 곧바로 커밋할 준비가 되었습니다"라고 소견할 것이지만, Git는 그렇지 않다. 그리드 스테이터 명령어로 파하나의 상태를 다시 한번 확인해 보자.


    헉가 Staged 상태이면서도 동시에 Unstaged 상태에 나쁘지는 않다. 어떻게 그런 일이 있다면 1인가. git add명령을 실행하면 Git은 파 1을 바로 Staged상태로 만든다. 가장 최근 이 시점에서 커밋을 하면, git commit 명령을 실행하는 시점의 버전이 커밋되는 것이 아니라, 마지막으로 git add 명령을 실행했을 때의 버전이 커밋된다. 그래서 git add명령을 실행한 후에 또 파 1을 수정하면 git add명령을 다시 실행하고 요즘 버전을 Staged상태로 해야 합니다.


    파의 첫 상태를 짧게 확인할 수 있는 gitstatus 명령에서 확인할 수 있는 스토리가 다소 많다. 사실은 그렇다. 좀 더 간단하게 변경 스토리를 표시하는 옵션이 있다. gitstatus-s 또는 gitstatus-short와 같이 옵션을 주면 현재 변경된 상태를 짧게 보여준다.


    아직 추적하지 않는 새로운 파 1앞에는? 표시가 붙다 Staged상태에 추가로 파 1중에 새로 발생한 파 1앞에는 A표시가 수정한 파 1앞에는 M표시가 붙는다. 상기 명령의 결과에서 상태 정보 칼럼에서는 2가지 정보를 나타낸다. 좌측에는 Staging Area에서의 상태를, 우측에는 Working Tree에서의 상태를 표시합니다. README파 1과 같은 경우 이에키울 변경했으나 아직 Staged상태에 추가하지는 않았다. lib/simplegit.rb파 1은 이에키울 변경하고 Staged상태에 추가까지 한 상태였던 위의 결과에서 차이를 비교하자. Rakefile은 변경했던 Staged상태에 추가한 뒤 또 이에키울 변경하고 Staged에서 Unstaged상태인 파 1이었다 ​ ​ 파 1을 무시하는 것 어떤 파 1은 Git이 관리할 필요가 없다. 아무래도 로그 파 1이 나쁘지 않고 빌드 시스템이 자동적으로 발생한 파 1이 그렇다. 그런 파 1을 무시한다면.gitignore파 1을 만들어 그 안에 무시하는 파 1패턴을 적는다. 아래는.gitignore파 1의 사례였다


    첫번째 라인은 확장자가 ". o"나".a"였다 파 1을 Git이 무시한다는 것이고, 두번째 라인은~~에 쿳그와잉눙 모든 파 1을 무시하겠다는 것이었다 보동 대부분의 텍스토표은비품에서 이이다·시 파 1에서 사용하는 파 1명 앞이기 때문이었다". o"와 ".a"는 각각 빌드 시스템이 만들어 낸 오브젝트와 아카이브 파 1에서~로 쿳그와잉눙파ー 1은 Emacs나 VI 같은 텍스트 표은비품카이다시로 만들어 낸 파 1이었다 또한 log, tmp, pid와 같은 디렉토리구어인 자동으로 발발하는 문서 등도 추가할 수 있다. .gitignore파 1은 보동 처음에 만들어 놓은 것이 편리하다. 그래서 Git탱크에 관여하지 못한 파 1을 실수로 위탁할 1을 방지할 수 있다.gitignore파 1에 입력하는 패턴은 아래의 규칙을 따른다.아무것도 없는 라인이 이과인, '#'로 시작하는 라인은 무시합니다.보통 Glob 패턴을 사용합니다. 이것은 프로젝트 모두에 적용된다.슬래시( / )로 시작할 경우 하위 디렉토리에 적용(Recursivity)되지 않는다.디렉토리는 슬래시(/)을 마지막으로 쓰는 것으로 표현합니다.느낌표(!)로 시작 패턴의 파 1은 무시하지 않는다.Glob 패턴은 정규 표현식을 단순하게 한 것으로 생각하면 되고, 보동참으로 많이 사용합니다. 아이스타리스크(*)는 문자가 하과인도 없는 거과인이상을 뜻하며, [abc]는 중괄호 안에 있는 문자 중 하과인을 의미합니다(그래서 이 경우 a, b, c). 물음표(?)은 글자구 와잉룰 이야기를 하고,[0-9]처럼 중괄호 안의 캐릭터 사이에 하이픈(-)를 사용하면 그 캐릭터 사이에 있는 글씨 허그 와잉룰 말합니다. 아이 스타 리스크 2개를 사용하여 디렉토리 내의 디렉토리까지 지정할 수 있다. a/**/z 패턴은 a/z, a/b/z, a/b/c/z 디렉토리에 사용할 수 있다.아래는.gitignore파 1의 사례였다


    Staged와 Unstaged상태의 변경 이에키울을 보기, 단순히 파 1이 변경됐다는 사실이 아니라 어느 이에키이 변경되었는지 검토하려면 git status명령이 아니라 git diff명령을 사용해야 합니다. 다만 우리는 '수정했지만 아직 Staged파 1이 아닌가.'과 '어느 파 1이 Staged상태인가?" ~"가 궁금하므로, gitstatus 명령어로도 충분하다. 더 자세히 볼 때는 git diff 명령을 사용하는데 Patch처럼 어떤 라인을 추가하고 삭제했는지 궁금할 때 사용합니다. README파 1을 수정하고 Staged상태로 CONTRIBUTING.md파 1은 그냥 수정만 한다. 이 상태에서 그리드 명령을 실행하면 아래와 같은 메시지를 볼 수 있다.


    git diff명령을 실행하면 수정했지만 아직 staged상태가 아닌 파 1을 비교해서 볼 수 있다.


    이 명령은 워킹 디렉토리에 있는 것과 Staging Area에 있는 것을 비교한다. 그래서 수정해서 아직 Stage를 하지 않았음을 보여준다.만약 커밋하려고 Staging Area에 넣은 파의 첫 번째 변경 부분을 보고 싶다면 git diff--staged 옵션을 사용한다. 이 명령은 저장소의 것과 Staging Area에 있는 것을 비교한다.


    반드시 잊어야 할 것이 있지만 git diff 명령은 마지막으로 커밋한 후에 수정한 것 전체를 나타내지 않는다. git diff는 Unstaged 상태의 것만 보여준다. 수정한 파 1을 모드 Staging Area에 넣었다면 git diff명령은 아무것도 출력하지 않는다.CONTRIBUTING.md파 1을 Stage한 후 다시 수정해도 git diff명령을 사용할 수 있다. 이때는 Staged상태인 것과 Unstaged상태인 것을 비교합니다.


    ====================================================================================================================================================​


    Staged 상태의 파하나는 git diff--cached 옵션에서 확인한다. staged와 -cached는 같은 옵션이다.


    변경 사항 커밋 하는 수정한 것을 동의하기 위해서 Staging Area파 1을 정리했습니다. Unstaged상태의 파 1은 커밋 되지 않는다는 것을 기억해야 한다. Git은 발셍하고 자기 수정해서 쟈싱 서울 git add명령으로 추가하지 않은 파 1은 관여할 수 없다. 그 파 1은 여전히 Modified상태로 남아 있다. 커밋하기 전에 그리드 명령에서 모든 것이 Staged 상태인지 확인할 수 있다. 그 후 git commit를 실행하여 커밋한다.


    Git 설정에 지정된 에디터가 실행되고 아래와 같은 텍스트가 자동으로 포함된다.(아래 예제는 Vim 에디터 화면이었다) 이 편집기는 기의 EDITOR 환경변수에 등록된 편집기로, 그대로는 Vim이나 Emacs를 사용한다. 또한 시작에서 설명한 것과 같이 git config --global core.editor 명령에서 어떤 에디터를 사용할지를 설정할 수 있다).에디터는 다음과 같은 예기를 표시한다(아래 예제는 Vim편집기).


    자동으로 발생하는 커밋 메시지의 1개 라인은 텅 비어 있었고 2번째 라인에서 "그ー토·위상·명령"결과가 채워진다. 커밋한 내용을 쉽게 기억할 수 있도록 이 메시지를 포함할 수도 있고 메시지를 모두 지우고 새로 작성할 수 있다(정확하게 무엇을 수정했는지도 표시할 수 있지만 git commit에 v옵션을 추가하면 편비품에 diff 메시지도 추가된다). 내용을 저장하고 편비품을 종료하면 Git는 입력된 내용(#로 시작하는 내용 제외)으로 새 커밋을 완성합니다.메시지를 인라인에서 사랑 첨부할 수도 있다. commit 명령어를 실행할 때 아래와 같이 -m 옵션을 사용합니다.


    이렇게 첫 번째 커밋을 작성해 봤다. commit명령은 몇가지 정보를 출력하는 데 위의 예는(master)브랜치에 관여하고 체크 섬은(463dc4f)이라고 일러준다. 그리고 수정한 파일이 몇 개이고 삭제된 후 추가된 라인이 몇 라인인지 알려준다.Git는 Staging Area에 속하는 스냅샷을 커밋하는 것을 기억해야 한다. 수정은 했지만, 아직 Staging Area에 넣지 않은 것은 다소 이익으로 커밋할 수 있다. 커밋할 때마다 프로젝트의 스냅샷을 기록하기 때문에 과인 중에 스냅샷끼리 비교하여 과인 이전의 스냅샷으로 되돌릴 수 있다.Staging Area를 생략한다=Staging Area는 커밋할 파일을 정리한다는 점에서 상당히 유용하지만 복잡하고 필요하지 않을 때도 있다. 아주 쉽게 Staging Area를 생략할 수 있다. git commit 명령어를 실행할 때 -a 옵션을 추가하면 Git은 Tracked 상태의 파일을 자동으로 Staging Area에 넣는다. 따라서, gitadd 명령을 실행하는 수고를 덜 수 있다.


    이 예제에서는, 커밋하기 전에 "gitadd"커맨드로 """파일을 추가하지 않은 점에 주목해 보자. a옵션을 사용하면 모든 파일이 자동으로 추가된다. 편리한 옵션이지만 주의 깊게 사용해야 합니다. 생각없이 이 옵션을 사용하면 추가하고 스토리아해야 하는 변경사항도 추가될 수 있기 때문입니다.파일을 삭제하는 Git에서 파일을 제거하려면 gitrm 명령에서 Tracked 상태의 파일을 삭제한 후에(정확히는 Staging Area에서 삭제할 것) 커밋해야 합니다. 이 명령은 워킹 디렉토리에 있는 파일도 삭제하기 때문에 실제로 파일도 삭제된다.Git 명령어를 사용하지 않고 단순히 워킹 디렉토리에서 파일을 삭제하고, git status 명령에서 상태를 확인하면, Git는 현재 "Changes not staged for commit"(즉, Unstaged 상태)이라고 표시해 준다.


    그리고 gitrm 명령을 실행하면 삭제한 파일은 Staged 상태가 된다.


    약속하면 파 1은 삭제되고 Git은 이 파 1을 더는 추적하지 않는다. 앞서고, 파 1을 수정하거나 Staging Area에(역주-Git Index이라고도 부른다)추가한 측면-f옵션을 부여하고 강제적으로 삭제해야 합니다 이 점은 실수로 데이터를 삭제하지 못하도록 하는 안전장치다. 관여하지 않고 수정한 데이터는 Git로 돌이킬 수 없는 때문이었다 또 Staging Area만 제거하고 워킹 디렉토리에 있는 파 1은 끄지 않고 남는 것 같다. 다시 말해서 하드 디스크에 있는 파 1은 당싱로 두고 Git만 추적하지 않도록 합니다. 이건.gitignore파 1에 추가하는 것을 게을리하면 대용량 로그 파 1과 곰(1의 파 한명.a파 1 같은 것을 실수로 추가했을 때에 사용한다. --cached 옵션을 사용하여 명령을 실행합니다.


    여러 파 1이과인 디렉토리를 한꺼번에 제거할 수도 있다. 아래와 같이 gitrm 명령어에 file-glob 패턴을 사용한다.


    전에 \"를 사용한 것을 기억하자. 파일명 확장기능은 셸에만 있는 것이 아니라 Git 자체에도 있기 때문에 필요하다. 이 명령은 log/디렉토리에 있다.log 파일을 모두 삭제합니다. 아래의 예제처럼 할 수도 있다.


    이 명령은 ~로 끝나는 파일을 모두 삭제한다.파일명 변경하는 Git는 다른 VCS 시스템과 달리 파일명 변경이나 파일의 이동을 명시적으로 관리하지 않는다. 다시 한번 예기하여 파일명이 변경되었다는 별도의 정보를 저장하지 않는다. Git는 똑똑해서 일부러 파일명이 변경되었어요.는 것을 추적하지 않아도 알 수 있는 방법이 있다. 파일이름이 변경된 것을 Git이 어떻게 아는지 보자.이렇게 예상해서 Git에 mv명령이 있는 것은 좀 이상하겠지만 아래와 같이 파일명을 변경할 수 있다.


    잘 동작한다. 이 명령을 실행하여 Git 상태를 확인해 보면, Git는 이름이 바뀐 것을 알 수 있다.


    실제로 gitmv 명령은 아래의 명령어를 실행한 것과 똑같다.


    gitmv 명령은 최초의 단축 명령이었다 이 명령으로 파의 첫 번째 이름을 바꿔도 되고 mv명령으로 파의 첫 이름을 직접 바꿔도 된다. 단지 git mv명령은 편리하게 명령을 세번 실행해 줄 뿐이었다. 어떤 도구로 이름을 바꿔도 상관없다. 중요한 것은 이름을 변경해서 반드시 rm/add 명령을 실행해야 한다는 것뿐이었다


    댓글

Designed by Tistory.