tech_memo / git


tech_memo

¥È¥é¥Ö¥ë¥·¥å¡¼¥È

¥³¥ó¥Õ¥ê¥¯¥ÈȯÀ¸»þ¤ÎÂбþ

  • push¤Ë¤·¤í¡¢pull¤Ë¤·¤í¡¢¥³¥ó¥Õ¥ê¥¯¥È¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¤ä¤ë¤³¤È¤ÏƱ¤¸
  1. ¥í¡¼¥«¥ë¤ÎÊÔ½¸Ãæ¤Î¥Õ¥¡¥¤¥ë¤Ïgit commit¤«¡¢git checkout¤·¤Æ̤ÊÔ½¸¾õÂ֤ˤ¹¤ë
  2. git pull¤·¤Æ¡¢¥ê¥â¡¼¥È¤ÎÊѹ¹¤ò¼è¤ê¹þ¤à
  3. ¤³¤Î¤È¤­¡¢¼«Æ°¥Þ¡¼¥¸¤Ç¤­¤Ê¤¤¥³¥ó¥Õ¥ê¥¯¥È¤¬È¯À¸¤·¤¿¾ì¹ç¡¢viÅù¡¢¼êÆ°ÊÔ½¸¤ÇÊѹ¹¤ò¼è¤ê¹þ¤à¡£°Ê²¼¤Ï¥³¥ó¥Õ¥ê¥¯¥È¤¬È¯À¸¤·¤¿¥Õ¥¡¥¤¥ë¤ÎÎã¡£
    <<<<<<<< HEAD
    ¥í¡¼¥«¥ë¤ÎÊÔ½¸ÆâÍÆ
    =======
    ¥ê¥â¡¼¥È¤Î¼è¤ê¹þ¤à¤Ù¤­ÆâÍÆ
    >>>>>>>> 72616890b37a0fb7b2f8cadf83524ed591430d5f
  4. git commit¤·¤Æ¡¢¥Þ¡¼¥¸¤ò¥í¡¼¥«¥ë¤ËŬÍÑ
  5. git push¤Ç¥ê¥â¡¼¥È¤ËŬÍÑ¡£²ò·è¡£

HTTP¤Ç¤Îgit push¤¬¤Ç¤­¤Ê¤¤

  • apache¥æ¡¼¥¶¤Ç¥ê¥Ý¥¸¥È¥ê¤Ø¤Î½ñ¤­¹þ¤ß¸¢¸Â¤¬É¬Íס£
    chown -R <¥ê¥Ý¥¸¥È¥ê¥Ñ¥¹>
  • ¤Þ¤¿¤Ï
    chmod -R o+w <¥ê¥Ý¥¸¥È¥ê¥Ñ¥¹>

git clone¤Ç¡¢(gnome-ssh-askpass:28635): Gtk-WARNING **: cannot open display:

  • °Ê²¼¤Î´Ä¶­ÊÑ¿ô¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢CUI´Ä¶­¤ÇȯÀ¸¤¹¤ë
    shishimaru@v-cent65% printenv SSH_ASKPASS  
    /usr/libexec/openssh/gnome-ssh-askpass
  • ¾åµ­¤ÏGUI´Ä¶­¤òɬÍפȤ¹¤ë¥×¥í¥°¥é¥à¤ÎÌÏÍÍ¡£GUI´Ä¶­¤À¤È gnome-ssh-askpass ¥×¥í¥°¥é¥à¤¬¥Ñ¥¹¥ï¡¼¥É¤ò¥­¥ã¥Ã¥·¥å¤·¤Æ¤¯¤ì¤ë¤é¤·¤¤¡£
  • CUI¤Î¾ì¹ç¤Î²óÈòÊýË¡¤Ï¤¤¤¯¤Ä¤«¤¢¤ë
  1. SSH_ASKPASS´Ä¶­ÊÑ¿ô¤ò¥¢¥ó¥»¥Ã¥È¤¹¤ë
    shishimaru@v-cent65% unset SSH_ASKPASS
  2. ¼«Á°¤Ç¥Ñ¥¹¥ï¡¼¥É¤òecho¤¹¤ë¥·¥§¥ë¤òÍÑ°Õ¤·¤Æ¡¢¤½¤Î¥¹¥¯¥ê¥×¥È¤ò´Ä¶­ÊÑ¿ô¤ËÀßÄꤹ¤ë
    shishimaru@v-cent65% export SSH_ASKPASS=/home/shishimaru/git_pass.sh
    • git_pass.sh
      #!/bin/bash
      echo <PASSWORD>
  3. clone¤¹¤ë¤È¤­¤ÎURL¤Ë¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤ò´Þ¤á¤ë
    shishimaru@v-cent65% git clone http://shishimaru:<PASSWORD>@v-cent65:8180/shishimaru/myproject.git

¥ê¥â¡¼¥È¥ê¥Ý¥¸¥È¥ê¤ÎÆâÍƤò¥í¡¼¥«¥ë¤Ë¶¯À©È¿±Ç¤¹¤ë

  • »²¹Í : http://qiita.com/ms2sato/items/72b48c1b1923beb1e186
  • ¥ê¥â¡¼¥È¤Ç¤Ï´ÉÍýºÑ¤À¤¬¡¢¥í¡¼¥«¥ë¤Ç̤´ÉÍý¤ÎƱ̾¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¡¢git pull¤¹¤ë¤È¥¨¥é¡¼¤Ë¤Ê¤ë¡£
  • ¥ê¥â¡¼¥È¤òÀµ¤Ë¤·¤Æ¥í¡¼¥«¥ë¤Ë¶¯À©¼è¹þ¤ß¤¹¤ëºÝ¤Ë°Ê²¼¤Î¥³¥Þ¥ó¥É¤¬ÍøÍѤǤ­¤ë¡£
    git fetch origin
    git reset --hard origin/master
  • ¤Ê¤ª¡¢¥ê¥â¡¼¥È̤´ÉÍý¤Ç¡¢¥í¡¼¥«¥ë¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¡£
    • ¥í¡¼¥«¥ë¤Ç¥³¥ß¥Ã¥ÈºÑ ¢Í ¾Ã¤¨¤ë
    • ¥í¡¼¥«¥ë¤Ç̤¥³¥ß¥Ã¥È ¢Í ¤½¤Î¤Þ¤Þ»Ä¤ë

¶õ¥Ç¥£¥ì¥¯¥È¥ê¤ògit add¤¹¤ëÊýË¡

  • »²¹Í : http://phiary.me/git-empty-directory-add/
  • tmp¥Ç¥£¥ì¥¯¥È¥ê¤ò¶õ¤È¤·¤ÆÅÐÏ¿¤¹¤ëÎã(¼ÂºÝ¤Ï1¥Õ¥¡¥¤¥ë¤À¤±ÅÐÏ¿¤·¤Æ¡¢¤½¤ì°Ê³°¤Ï.gitignore¤Ç̵»ë¤µ¤»¤ë¤È¤¤¤¦¼êË¡)
  • tmp¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Ë.gitkeep¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºîÀ®¡Ê̾Á°¤Ï¤Ê¤ó¤Ç¤âOK)
    tmp/.gitkeep
  • .gitignore¤Ë.gitkeep°Ê³°¤Ï̵»ë¤¹¤ëÀßÄê¤òµ­Æþ
    tmp/*  
    !.gitkeep

git´ÉÍý¤«¤é½ü³°¤¹¤ë(.gitignore)

´û¤Ëgit´ÉÍý²¼¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤ògit´ÉÍý¤«¤é½ü³°¤¹¤ë

  • »²¹Í : http://d.hatena.ne.jp/hkobayash/20130416/1366129434
  • ÊýË¡­¡ assume-unchanged
    • #̵»ë
      git update-index --assume-unchanged [¥Õ¥¡¥¤¥ë̾]
    • #̵»ë²ò½ü
      git update-index --no-assume-unchanged [¥Õ¥¡¥¤¥ë̾]
    • ¸½ºß¤ÎÀßÄê³Îǧ
      git ls-files -v
      h hoge.txt    # ¾®Ê¸»ú¤À¤ÈÀßÄêON
      H huga.txt
  • ÊýË¡­¢ skip-worktree
    • #̵»ë
      git update-index --skip-worktree [¥Õ¥¡¥¤¥ë̾]
    • #̵»ë²ò½ü
      git update-index --no-skip-worktree [¥Õ¥¡¥¤¥ë̾]
    • ¸½ºß¤ÎÀßÄê³Îǧ
      git ls-files -v
      S hoge.txt    # ¥¹¥Æ¡¼¥¿¥¹S¤À¤ÈÀßÄêON
      H huga.txt
  • ­¡¤È­¢¤Î°ã¤¤
    • ¥í¡¼¥«¥ë¡¢¥ê¥â¡¼¥È¤È¤â¤ËÊÔ½¸Ãæ¤Çgit pull¤·¤¿¾ì¹ç
      • ­¡ ¥í¡¼¥«¥ë¤ÎÊѹ¹¤ÏÇË´þ¤µ¤ì¤Æ¡¢¥ê¥â¡¼¥È¤Î¾õÂÖ¤ò¼è¤ê¹þ¤à
      • ­¢ ¥í¡¼¥«¥ë¤ÎÊѹ¹¤òÊÝ»ý¤·¡¢¥ê¥â¡¼¥È¤Î¾õÂÖ¤ò¼è¤ê¹þ¤Þ¤Ê¤¤
    • ¥í¡¼¥«¥ëÊÔ½¸Ãæ¤Çgit reset --hard¤·¤¿¾ì¹ç
      • ­¡ ¥í¡¼¥«¥ë¤ÎÊѹ¹¤ÏÇË´þ
      • ­¢ ¥í¡¼¥«¥ë¤ÎÊѹ¹¤òÊÝ»ý

°ìÉô¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤À¤±¤òcheckout¤¹¤ë

  • git sparse(¤Þ¤Ð¤é¤Ê¤Î°Õ)¤Ç²Äǽ

ºÇ½é¤Ëclone¤¹¤ëÊýË¡

  1. git clone¤Ç¥í¡¼¥«¥ë¥ê¥Ý¥¸¥È¥êºîÀ®
    git clone <¥ê¥Ý¥¸¥È¥êURL>
  2. sparsecheckout ¤òÍ­¸ú¤Ë¤¹¤ë
    git config core.sparsecheckout true
  3. ¥Á¥§¥Ã¥¯¥¢¥¦¥È¤¹¤ëÂоݤΥǥ£¥ì¥¯¥È¥ê¡¢¤Þ¤¿¤Ï¥Õ¥¡¥¤¥ë¤ò .git/info/sparse-checkout ¤Ëµ­Æþ
    echo I_want/this_folder/ > .git/info/sparse-checkout
  4. ²¼µ­¥³¥Þ¥ó¥É¤ò¼Â¹Ô¡£¥Ä¥ê¡¼¾ðÊó¤òÆɤ߹þ¤ó¤Çindex¤Ë¥Þ¡¼¥¸¤¹¤ë¤é¤·¤¤¡£
    git read-tree -m -u HEAD
  5. ¥Á¥§¥Ã¥¯¥¢¥¦¥È¤¹¤ëÂоݤò Áý¤ä¤¹¾ì¹ç¤Ï¡¢git/info/sparse-checkout ¤ËÄɵ­¤·¡¢git read-tree¤òºÆ¼Â¹Ô
    echo I_forget/this_folder/ >> .git/info/sparse-checkout
    git read-tree -m -u HEAD

ºÇ½é¤Ëclone¤·¤Ê¤¤ÊýË¡

  1. ¶õ¤Î Git ¥ê¥Ý¥¸¥È¥ê¤È¤·¤Æ½é´ü²½
    git init
  2. sparsecheckout ¤òÍ­¸ú¤Ë¤¹¤ë
    git config core.sparsecheckout true
  3. ¥ê¥â¡¼¥È¥ê¥Ý¥¸¥È¥ê¤Î URL ¤ò origin ¤È¤·¤ÆÅÐÏ¿
    git remote add origin <¥ê¥Ý¥¸¥È¥êURL>
  4. ¥Á¥§¥Ã¥¯¥¢¥¦¥È¤¹¤ëÂоݤΥǥ£¥ì¥¯¥È¥ê¡¢¤Þ¤¿¤Ï¥Õ¥¡¥¤¥ë¤ò .git/info/sparse-checkout ¤Ëµ­Æþ
    echo "child/*" > .git/info/sparse-checkout
    • ¥Ç¥£¥ì¥¯¥È¥ê¤Î¾ì¹ç¤Ï''ºÇ¸å¤Ë¥¹¥é¥Ã¥·¥å¤ò¤Ä¤±¤ë¤³¤È'¡£'¤Ê¤¤¤È¡¢°Ê²¼¤Î¥¨¥é¡¼¤¬È¯À¸¤¹¤ë
      error: Sparse checkout leaves no entry on working directory
  1. ¹¥¤­¤Ê¥Ö¥é¥ó¥Á¤ò pull (checkout) ¤¹¤ë
    git pull origin master

¥Ö¥é¥ó¥Á´ÉÍý

¥Ö¥é¥ó¥ÁºîÀ® + ¥ê¥â¡¼¥È¤Ëpush

  • ¡ÊÄ̾ï)¥Þ¥¹¥¿¡¼¥Ö¥é¥ó¥Á¤ò¤â¤È¤Ë³«È¯¥Ö¥é¥ó¥ÁºîÀ®
    git branch develop
    git checkout develop
    • ¾åµ­¤ò°ì³ç¤Ç¹Ô¤¦¾ì¹ç
      git checkout -b develop
  • ºîÀ®¤·¤¿³«È¯¥Ö¥é¥ó¥Á¤ò¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á¤Ëpush
    git push origin develop

¥ê¥â¡¼¥È¤Î¥Ö¥é¥ó¥Á¤ò¥í¡¼¥«¥ë¤Ëcheckout

  • ¥ê¥â¡¼¥È¤«¤é¥Ö¥é¥ó¥Á¤ò¼èÆÀ
    git branch develop origin/develop
  • checkout¤ÈƱ»þ¤Ë¤½¤Î¥Ö¥é¥ó¥Á¤Ë°ÜÆ°¤¹¤ë¾ì¹ç
    git checkout -b develop origin/develop
  • °Ê²¼¤Ï¸½ºß¤¤¤ë¥í¡¼¥«¥ë¥Ö¥é¥ó¥Á¤Ë¥Þ¡¼¥¸¤µ¤ì¤ë¤Î¤Ç¡¢´üÂÔ¤¹¤ëºî¶È¤Ç¤Ê¤¤¾ì¹ç¤Ï¤ä¤Ã¤Æ¤Ï¤¤¤±¤Ê¤¤
    git pull origin [develop:]develop

¥Þ¡¼¥¸

  • develop¥Ö¥é¥ó¥Á¤ÎÆâÍƤòmaster¤Ë¥Þ¡¼¥¸
    git checkout master
    git merge develop

¥³¥Þ¥ó¥É

git status

git´ÉÍý³°¥Ç¥£¥ì¥¯¥È¥êÇÛ²¼¤âɽ¼¨

  • ¥ª¥×¥·¥ç¥ó¤Ê¤·¤Îgit status¤Ï¡¢git´ÉÍý³°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ÎÇÛ²¼¤Ïɽ¼¨¤µ¤ì¤Ê¤¤
    $ git status                                      
    On branch master
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
           dir/
    
    nothing added to commit but untracked files present (use "git add" to track)
  • -u ¥ª¥×¥·¥ç¥ó¤Ç´ÉÍý³°¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤âɽ¼¨²Äǽ
    $ git status -uall # all¤Ï¥Ç¥Õ¥©¥ë¥È¤Ê¤Î¤Ç¤Ê¤¯¤Æ¤â¤è¤¤
    On branch master
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
           dir/dir2/huga.txt
           dir/hoge.txt
    

´Ê°×ÈÇɽ¼¨

  • -s¤Ç´Ê°×ɽ¼¨
  • ¥¹¥Æ¡¼¥¿¥¹É½¼¨¤Ï¡¢¹ÔƬ¤«¤é[ XY ]¤ÎÆóʸ»ú¤Çɽ¼¨¤µ¤ì¤ë
    • X : git add ¤·¤¿¸å¤Î¥¹¥Æ¡¼¥¿¥¹ (index¤Î¥¹¥Æ¡¼¥¿¥¹)
    • Y : git add ¤¹¤ëÁ°¤Î¥¹¥Æ¡¼¥¿¥¹ (work¥Ä¥ê¡¼¤Î¥¹¥Æ¡¼¥¿¥¹)
      $ git status -su
      XY
      A  dir/hoge.txt  # git´ÉÍý³°¤Î¥Õ¥¡¥¤¥ë¡£git add¤·¤¿¾õÂÖ
       M hoge.txt      #  git´ÉÍý²¼¤Î¥Õ¥¡¥¤¥ë¤ò½¤Àµ¡£git add¤Ï¤Þ¤À¤·¤Æ¤¤¤Ê¤¤
      M  huga.txt      #  git´ÉÍý²¼¤Î¥Õ¥¡¥¤¥ë¤ò½¤Àµ¡£git add¤·¤Æ¤¤¤ë¾õÂÖ
      ?? dir/dir2/huga.txt # git´ÉÍý³°¤Î¥Õ¥¡¥¤¥ë¡£git add¤·¤Æ¤¤¤Ê¤¤¾õÂÖ

¥Õ¥¡¥¤¥ë¤òÆÃÄê¤Î¥ê¥Ó¥¸¥ç¥ó¤ËÌ᤹

git checkout <¥³¥ß¥Ã¥ÈID> <¥Õ¥¡¥¤¥ë>

¥ê¥â¡¼¥È¤«¤éÆÃÄê¤Î¥Ö¥é¥ó¥Á¤ò»ØÄꤷ¤Æclone

git clone -b <¥Ö¥é¥ó¥Á̾> <URL>

º¹Ê¬¥Õ¥¡¥¤¥ë¤ò¥¢¡¼¥«¥¤¥Ö(svn export + zip)

¥í¥°´ØÏ¢

¥È¥Ô¥Ã¥¯¥Ö¥é¥ó¥Á¤Î¥í¥°¤Î¤ßɽ¼¨

¥í¥°¤Ë¥Õ¥¡¥¤¥ë̾¤òɽ¼¨¤¹¤ë


¥ê¥â¡¼¥È¥ê¥Ý¥¸¥È¥ê¤Îºï½ü

  • ¥ê¥â¡¼¥È¤Îfoo¥Ö¥é¥ó¥Á¤òºï½ü¤¹¤ë¾ì¹ç
    git push --delete origin foo
  • ¤Þ¤¿¤Ï
    git push origin :foo

git add»þ¤Î²þ¹Ô¥³¡¼¥ÉÊÑ´¹¤ÎWARN¤òÍÞ»ß

  • WIndows¤Çgit¤ò»È¤¦¤È¤è¤¯½Ð¤ë¡£°Ê²¼¤Ç¡¢²þ¹Ô¥³¡¼¥É¤ÎÊÑ´¹¤ò̵¸ú¤Ë¤¹¤ë
    git config --global core.autoCRLF false

¥ê¥Ý¥¸¥È¥êÇÛ²¼¤Î¥Õ¥¡¥¤¥ë¤òÊÔ½¸¸å¡¢git add¤ò¥¹¥­¥Ã¥×¤·¤Æ¥³¥ß¥Ã¥È

  • ¡Ö-a¡×¥ª¥×¥·¥ç¥ó¤Çgit add¤ò¥¹¥­¥Ã¥×²Äǽ
    git commit -a -m "edit hoge.txt"
  • ¤Ê¤ª¡¢¥ê¥Ý¥¸¥È¥ê´ÉÍý³°¤Î¥Õ¥¡¥¤¥ë¤Ï¡Ö-a¡×¥ª¥×¥·¥ç¥ó¤ò»ÈÍѤ·¤Æ¤â¡¢Ìµ»ë¤µ¤ì¤ë¡Êgit add¤¬É¬Í×)

git¤Ç¤Îsvn revert

  • Á´ÂΤòÌ᤹¾ì¹ç
    git reset --hard HEAD
  • ¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤ÆÌ᤹¾ì¹ç
    git checkout [HEAD] <PATH>

SVN¥³¥Þ¥ó¥É¤È¤ÎÂбþ


¥ê¥Ý¥¸¥È¥ê¤òHTTP¤ÇÁàºî(clone pushÅù)¤Ç¤­¤ë¤è¤¦ÀßÄê

Smart HTTP¤È¤Ï¡©

  • HTTP¤Î¥×¥í¥È¥³¥ë¤òÍøÍѤ·¤Ê¤¬¤é¡¢ssh¤ä¡¢git¤Î¤è¤¦¤Ë¸úΨ¤Î¤è¤¤Å¾Á÷¤ò¼Â¸½¤¹¤ë¤â¤Î¡Ê¤Ã¤Ý¤¤¡Ë¡£git¥¤¥ó¥¹¥È¡¼¥ë»þ¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ëCGI¥¹¥¯¥ê¥×¥È¤¬¥¨¥ó¥¸¥ó¤òô¤Ã¤Æ¤½¤¦¡£

¥Ù¥¢¥ê¥Ý¥¸¥È¥êºîÀ®

shishimaru@v-cent65% sudo mkdir -p /home/git
shishimaru@v-cent65% cd /home/git
shishimaru@v-cent65% sudo git init --bare --shared myproject.git

ApacheÀßÄê

  • HTTP¤Ç¥í¡¼¥«¥ë¤«¤épush¤¹¤ë¤³¤È¤Ë¤Ê¤ë¤Î¤Ç¡¢¥ª¡¼¥Ê¡¼¤òapache¤ËÊѹ¹¤·¤Æ¤ª¤¯
    shishimaru@v-cent65% sudo chown -R apache:apache /home/git
  • BASICǧ¾ÚÍѤΥѥ¹¥ï¡¼¥ÉºîÀ®
    shishimaru@v-cent65% htpasswd -c /home/git/.htpasswd shishimaru
    New password:
    Re-type new password:
    Adding password for user shishimaru
  • /etc/httpd/conf.d/git.conf¤òºîÀ®
    SetEnv GIT_PROJECT_ROOT /home/git
    SetEnv GIT_HTTP_EXPORT_ALL
     
    ScriptAlias /git /usr/libexec/git-core/git-http-backend
     
    <locationMatch "/git">
      AuthType Basic
      AuthName "Git Area"
      AuthUserFile /home/git/.htpasswd
      require valid-user
      Order allow,deny
      Allow from all
    </locationMatch>
  • GIT_PROJECT_ROOT
    • ¥ê¥â¡¼¥È¥ê¥Ý¥¸¥È¥ê¤Î¿Æ¥Ç¥£¥ì¥¯¥È¥ê¥Ñ¥¹¤ò»ØÄê¡£
      • /usr/local/git/test.git¡¡¤¬¥ê¥Ý¥¸¥È¥ê¤Î¥Ñ¥¹¤À¤Ã¤¿¤é¡¡/usr/local/git ¡¡¤Èµ­½Ò
  • GIT_HTTP_EXPORT_ALL
    • ÀßÄꤷ¤Ê¤¤¤È¡¢¥¯¥é¥¤¥¢¥ó¥È¤«¤é¤Î¥¢¥¯¥»¥¹¤ÏÆɤ߹þ¤ßÀìÍѤˤʤꡢÆɤ߹þ¤á¤ë¤Î¤Ï git-daemon-export-ok ¥Õ¥¡¥¤¥ë¤¬Êݸ¤µ¤ì¤¿¥ê¥Ý¥¸¥È¥ê¤À¤±¤Ë¤Ê¤ë
  • ScriptAlias?
    • git¤ÎCGI¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄꤹ¤ë¡£¤É¤³¤ËGit¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¤«¤Ç³ÊǼ¾ì½ê¤âÊѤï¤ë¤Î¤Ç¡¢locateÅù¤Ç³Îǧ¤¹¤ë¤³¤È
      shishimaru@v-cent65% sudo locate git-http-backend 
      /usr/libexec/git-core/git-http-backend
    • ¥¨¥¤¥ê¥¢¥¹Ì¾¤ÎºÇ¸å¤Ë¡Ö/¡×¤Ï¤Ä¤±¤Ê¤¤¤³¤È¡£¤Ä¤±¤ë¤È¥¢¥¯¥»¥¹»þNot Found¥¨¥é¡¼¤Ë¤Ê¤ë

git clone»þ¤ÎÃí°Õ

nginxÈÇ

Web¥Ö¥é¥¦¥¶¤«¤é±ÜÍ÷¤¹¤ëÀßÄê

GitWeb?

GitWeb?³µÍ×

  • Subversion¤Î¤è¤¦¤Ë¡¢Web¥Ö¥é¥¦¥¶¤«¤é¥ê¥Ý¥¸¥È¥ê¤ò±ÜÍ÷¤Ç¤­¤ë
  • ¥Õ¥¡¥¤¥ë¤Î¹½À®¡¦Ãæ¿È¤À¤±¤Ç¤Ê¤¯¡¢¥í¥°¤â¸«¤ì¤ë

¹½ÃÛ

  • ËÜÂÎ¥¤¥ó¥¹¥È¡¼¥ë
    shishimaru@v-cent65% sudo yum install -y gitweb
  • ËÜÍè¡¢°Ê²¼¤Î¤è¤¦¤ÊÀßÄê¤Ç¡¢/etc/httpd/conf.d/git.conf¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë¤¬
    Alias /git /var/www/git
    
    <Directory /var/www/git>
      Options +ExecCGI
      AddHandler cgi-script .cgi
      DirectoryIndex gitweb.cgi
    </Directory>
  • ¤¹¤Ç¤Ë¼«Á°¤Çgit.conf¤òºîÀ®¤·¤Æ¤¤¤¿¤Î¤Ç¡¢git.conf.rpmnew¤È¤¤¤¦¥Õ¥¡¥¤¥ë̾¤Ç¾åµ­¤¬ºîÀ®¤µ¤ì¤Æ¤¤¤¿¡£
  • ¤Þ¤¿¡¢¾åµ­Alias¤Î¡Ö/git¡×¤Ï¤¹¤Ç¤ËHTTP¤ÇÍøÍѤ¹¤ëÀßÄê¤Ç»ÈÍѤ·¤Æ¤¤¤¿¤Î¤Ç¡¢git.conf.rpmnew¤Ï¤¹¤Ù¤Æ¥³¥á¥ó¥È¥¢¥¦¥È¤·¤Æ¡¢°Ê²¼¤Î¤è¤¦¤Ë¼«Á°git.conf¤ËÀßÄê¤òÄɲä·¤¿¡£
    #------------------------------------
    # HTTP¥¢¥¯¥»¥¹ÍѤÎÀßÄê¡Ê¸µ¡¹¤Î¼«Á°ÀßÄê)
    #------------------------------------
    SetEnv GIT_PROJECT_ROOT /home/git
    SetEnv GIT_HTTP_EXPORT_ALL
    
    ScriptAlias /git /usr/libexec/git-core/git-http-backend
    
    <locationMatch "/git">
      AuthType Basic
      AuthName "Git Area"
      AuthUserFile /home/git/.htpasswd
      require valid-user
      Order allow,deny
      Allow from all
    </locationMatch>
    
    #------------------------------------
    # ¤³¤³¤«¤égitwebÍѤÎÀßÄê (ÄɲÃʬ)
    #------------------------------------
    
    # ¢­ Alias̾¤ò¤«¤Ö¤é¤Ê¤¤¤è¤¦¤Ëgitweb¤ËÊѹ¹
    Alias /gitweb /var/www/git
    
    <Directory /var/www/git>
      Options +ExecCGI
      AddHandler cgi-script .cgi
      DirectoryIndex gitweb.cgi
    </Directory>
  • gitweb¤ÎÀßÄê¡£¥Ö¥é¥¦¥¶±ÜÍ÷¤·¤¿¤¤¥ê¥Ý¥¸¥È¥ê¤Î¿Æ¥Ç¥£¥ì¥¯¥È¥ê¤ò»ØÄê¡£
    shishimaru@v-cent65% sudo vim /etc/gitweb.conf
    
    our $projectroot = "/home/git";
  • °Ê¾å¤Ç¡¢http://<¥µ¡¼¥Ð>/gitweb¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤È¸«¤ì¤ë¤Ï¤º

Windows¥¯¥é¥¤¥¢¥ó¥È´Ä¶­¥»¥Ã¥È¥¢¥Ã¥×

Git for Windows (msysGit)

  • ÀΤÏmsysGit¤È¸Æ¤Ð¤ì¤Æ¤¤¤¿¡£Git Bash¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë
  • Admin¸¢¸Â¤Ê¤·¤Ç¥¤¥ó¥¹¥È¡¼¥ë²Äǽ¡£
  • TortoiseGit?¤òÍøÍѤ¹¤ëÁ°Ä󥽥եȤǤ⤢¤ë¡£

TortoiseGit?

  • TortoiseSVN¤ÎgitÈÇ¡£
  • Í×Admin¸¢¸Â

¥ê¥â¡¼¥È¥ê¥Ý¥¸¥È¥ê¤Î¥Ö¥é¥ó¥Á¤ò¥í¡¼¥«¥ë¥ê¥Ý¥¸¥È¥ê¤Ë¼èÆÀ

  1. master¥Ö¥é¥ó¥Á¤Çpull (¥ê¥â¡¼¥È¤Î¥Ö¥é¥ó¥Á¾ðÊó¤Î¼èÆÀ)
  2. ±¦¥¯¥ê¥Ã¥¯ ¢ª TortoiseGit? ¢ª Swich/Checkout¤ÇÀÚ¤êÂؤ¨²Äǽ

²þ¹Ô¥³¡¼¥ÉÊÑ´¹Ìµ¸ú

push»þ¤Î¥æ¡¼¥¶Ì¾¡¦¥Ñ¥¹¥ï¡¼¥É¤Î¾Êά

HTTP(S)¤Î¾ì¹ç

  • $HOME/.netrc (Windows¤Î¾ì¹ç C:/User/<USER>/_netrc)¤Ë°Ê²¼¤òµ­½Ò
    machine 192.168.0.1
    login <USERNAME>
    password <PASSWORD>
    machine 192.168.0.2
    login <USERNAME>
    password <PASSWORD>

µÕ°ú¤­

GitLab?

SVN¤«¤éGit¤Ø¤Î°Ü¹Ô

PKG¥¤¥ó¥¹¥È¡¼¥ë

  • RHEL6.3¤Ë¤Ïɸ½à¤Çgit-svn¥Ñ¥Ã¥±¡¼¥¸¤¬Â¸ºß¤·¤Ê¤¤¡Ê¥ª¥×¥·¥ç¥Ê¥ëPKG¤¬É¬ÍפÀ¤¬¡¢³°ÉôÀܳ¡Ê¡Ü¥µ¥Ö¥¹¥¯¥ê¥×¥·¥ç¥ó¤â¤¤¤ë¡©¡Ë¤¬É¬ÍפǺ£²ó¤ÏNG)¤Î¤Ç¡¢°Ê²¼¤«¤é¡¢PKG¤ò¥À¥¦¥ó¥í¡¼¥É
    • https://mirror.netcologne.de/oracle-linux-repos/ol6_latest/getPackage/
      • git-svn-1.7.1-2.el6_0.1.noarch.rpm
      • subversion-perl-1.6.11-7.el6.x86_64.rpm (°Í¸PKG¡£Ìµ¤¤¤È¡¢¥¤¥ó¥¹¥È¡¼¥ë»þ¤Ë¡¢perl(SVN::Core)¤¬Ìµ¤¤¤È¤¤¤¦¥¨¥é¡¼¤¬È¯À¸¤¹¤ë)
        ¢¬ subversion¥Ñ¥Ã¥±¡¼¥¸¤È¥ê¥ê¡¼¥¹Èֹ椬°ìÃפ¹¤ë¤â¤Î¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¡£°ìÃפ·¤Æ¤¤¤Ê¤¤¤È¤¿¤Ö¤ó¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤Ê¤¤¡£
  • ¤¢¤È¤Ïyum¤Çrpm¤ò»ØÄꤷ¤Æ¥¤¥ó¥¹¥È¡¼¥ë
    yum install git-svn-1.7.1-2.el6_0.1.noarch.rpm

°Ü¹Ô¼ê½ç³µÍ×

  1. git svn clone¤ÇSVN¤«¤égit¥ê¥Ý¥¸¥È¥êºîÀ®
    git svn clone -s --no-follow-parent --prefix=svn/ <SVN-URL>
  2. SVN¤Î¥Ö¥é¥ó¥ÁÇÛ²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬git¤Î¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á¤È¤·¤ÆºîÀ®¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¥í¡¼¥«¥ë¤ËºîÀ®
    • ¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á°ìÍ÷³Îǧ
      git branch -r 
    • ¥í¡¼¥«¥ë¥Ö¥é¥ó¥ÁºîÀ®¡Ê¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á¤Î¿ô¤À¤±¼Â»Ü)
      git branch <¥í¡¼¥«¥ë¥Ö¥é¥ó¥Á̾> <¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á̾>
  3. SVN¤ÎtagÇÛ²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬¡¢git¤Î¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á¤Ë¡¢tags/<¥Ç¥£¥ì¥¯¥È¥ê̾>¤ÇºîÀ®¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤ì¤ògit¤Î¥¿¥°ÉÕ¤±¤¹¤ë
    • ¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á(¥¿¥°)°ìÍ÷³Îǧ
      git branch -r | grep tags
    • git tag <¥í¡¼¥«¥ë¥¿¥°Ì¾> <¥ê¥â¡¼¥È¥Ö¥é¥ó¥Á(¥¿¥°)̾>
  4. ¥Ù¥¢¥Ý¥¸¥È¥ê¤ËÈ¿±Ç
    • ¥Ù¥¢¥ê¥Ý¥¸¥È¥êºîÀ®(Ê̥ǥ£¥ì¥¯¥È¥ê¤Çºî¶È) git init --bare --shared <¥Ù¥¢¥Ý¥¸¥È¥êURL> <¥Ù¥¢¥ê¥Ý¥¸¥È¥ê¥Ç¥£¥ì¥¯¥È¥ê>
    • ¾åµ­¥ê¥Ý¥¸¥È¥ê¤ò¥í¡¼¥«¥ë¤ËÅÐÏ¿
      git remote add origin <¥Ù¥¢¥ê¥Ý¥¸¥È¥êURL>
    • ¥Ö¥é¥ó¥Á(master´Þ¤à)¤òpush
      git -u push origin --all
    • ¥¿¥°¤òpush
      git push origin --tags

RPM