Page tree
Skip to end of metadata
Go to start of metadata

github


  • local branch upstream 설정
    • $ git branch --set-upstream-to=origin/<remote branch name> <local branch name>
    • push
      • $ git push origin HEAD:<remote branch>
  • local branch 변경 사항 remote master 에 push 하기
  • Windows 에서 사용 시 (Unix 공용 시 LF 사용 추천)
    • git diff 시 ^M 무시하기
      • $ git config core.whitespace cr-at-eol
    • crlf 자동 변환
      • $ git config --global core.autocrlf true
    • crlf warning 없애기
      • $ git config --global core.safecrlf false
  • tagging
    • tag 확인하기
      • git tag
    • tag 달기
      • git tag 1.0
      • or git tag -a 1.0 -m "Release 1.0"
    • push
      • git push --tags
    • tag 삭제
      • git tag -d 1.0
    • remote tag 삭제
      • git push origin :1.0

설정


  • commit tool 변경
    • git config --global core.editor vim
  • diff tool 변경
    • git config --global diff.tool vimdiff
  • git diff 에 자동줄바꿈 word wrap 적용
    • git config --global core.pager 'less -r'
  • git apply 할 때 "1 line adds white space errors." 경고 나올 때,
    • git config --global apply.whitespace nowarn
  • $ vi ~/.gitconfig
    • [user]
      email = gencode.me@gmail.com
      name = KJ Kim
      [core]
      editor = vim
      pager = less -r
      [diff]
      tool = vimdiff
      [push]
      default = simple
      [apply]
      whitespace = nowarn

명령어


  • patch 파일 만들기
    • git format-patch -1 --binary (가장 최신 commit 한 개)
  • patch 적용
    • git apply -p1 < [패치파일]  (패치파일 한 개 적용)
  • .gitignore 에 추가한 파일이 계속 나올 때
    • $ git rm -r --cached <file or folder>
  • git pull 할 때마다 Why merge 해야 되냐고 explain 하라고 나올 때
    • git pull --no-edit
  • git 통계
    • git ls-files | xargs wc -l

git auto versioning


  • commit 할 때 자동으로 버전 넘버 업데이트하기
    • 버전넘버는 <tag>.<revision> 으로 구성
      • 큰 버전 업데이트 시 수동으로 tagging
      • 작은 버전은 commit 개수가 자동으로 업데이트
    • 태그달기 (큰 버전)
      • git tag 0.1
    • commit 수 (작은 버전)
      • git log --oneline | wc -l
    • 버전 출력 형태
      • 0.1.60
  • git hooks 스크립트로 commit 시 버전 자동 업데이트 하기
    • .git/hooks/pre-commit
      #!/bin/bash
      revisioncount=`git log --oneline | wc -l`
      projectversion=`git describe --tags --long`
      cleanversion=${projectversion%%-*}
      
      echo "$cleanversion.$revisioncount" > VERSION
      git add VERSION
  • commit 후 버전 출력

    • .git/hooks/post-commit
      #!/bin/bash
      cat VERSION
  • 이후 commit 할 때 마다 project의 VERSION 파일이 자동으로 업데이트 됨

git-server


  • git, ssh 설치
    • sudo apt-get install git ssh
  • server에 git 대표계정 생성
    • $ sudo adduser git
    • $ su git
    • $ mkdir ~/.ssh
    • $ sudo chmod 700 ~/.ssh
  • 사용자 공개키 등록
    • $ cat id_rsa.pub >> ~/.ssh/authorized_keys
    • $ sudo chmod 600 ~/.ssh/authorized_keys
  • git 계정 쉘 기능 제한
    • $ sudo vi /etc/passwd
    • /etc/passwd
      -git:x:1001:1001:,,,:/home/git:/bin/bash
      +git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
  • git repository 생성

    • $ su git
    • $ cd <git repo directory>
    • $ mkdir project.git
    • $ cd project.git
    • project.git $ git init --bare --shared
    • git이 아닌 다른 계정으로 만들었을 경우

      $ sudo chown -R git <project.git>

    • github 로부터 repo 복사하기

      • $ git pull git@github.com:<id>/project.git
    • github 특정 tag 로 repo 복사하기
      • $ git pull git@github.com:<id>/project.git +refs/tags/<tag>:<local branch>
  • 클라이언트에서 git repo clone 하기
    • $ git clone ssh://git@localhost:/<git repo directory>/project.git
  • git-server repo log 확인
    • $ git log origin/master
  • warning: push.default is unset; its implicit value is changing in 발생할 경우

    $ git config --global push.default simple