Version 49 (modified by mitty, 9 years ago) (diff) |
---|
Git
- Git - Book
- 3.3 Git のブランチ機能 - ブランチの管理
現在作業中のブランチにマージ済みのブランチを調べるには git branch –merged を実行します。 まだマージされていない作業を持っているすべてのブランチを知るには、git branch --no-merged を実行します。
- 3.3 Git のブランチ機能 - ブランチの管理
- Git入門 - トップページ
- Gitの基礎練習
- Subversion ユーザーが Git を使ってみた (基本操作編) - まちゅダイアリー(2010-05-06)
- Subversion使っている人間としては分かりやすい
- ファイルシステムとしての Git - 言語ゲーム
- git-cherry-pickを掘り下げる - idesaku blog
- transitive.info - Git 考え方
- キャレットとチルダ
- HEAD^とHEAD~の違いなど
- Pro Gitと入門Gitと入門gitでGitの復習 HEADのキャレットとかチルダとか補講編 - kk_Atakaの日記
- こちらも分かりやすい
- git fetch と git pull と git remote update の違い - わからん
- What is the difference between `git fetch origin` and `git remote update origin`? - Stack Overflow
The answer recommending remote update instead of git fetch was actually recommending it without a remote name, just for the sake of fetching all, not just the one named as an argument. This is equivalent to git fetch --all.
- What's the difference between git clone --mirror and git clone --bare - Stack Overflow
- 通常のclone, clone --bare, clone --mirrorの違いについて詳しく書かれている
- gitのbareリポジトリのバックアップをとる - 馬鹿と天才は紙一重
バックアップ用のリポジトリを作るのであれば--bareではなく--mirrorというオプションをつけます。
$ git clone --mirror yamucha chaoz
git-pullをすると、chaozはbareリポジトリだから管理ファイルしか存在しないためにmergeができないよと怒られます。なのでここではgit-fetchをしないといけません。
- git clone --mirror - Humanity
--mirrorは実際これと同じことをしてるっぽい(たぶん)
$ git clone --bare {uri} $ cd {dir} $ git config remote.origin.fetch '+refs/*:refs/*' $ git config remote.origin.url $uri $ git config remote.origin.mirror true
- Duplicating a repository · GitHub Help
$ git clone --bare https://github.com/exampleuser/old-repo.git $ cd old-repo.git $ git push --mirror https://github.com/exampleuser/new-repo.git
- Gitでexportするときはgit archiveとgit checkout-indexのどちらがよいか - DQNEO起業日記
masterブランチをエクスポートしたいとします。
mkdir /tmp/foo git archive master | tar -x -C /tmp/foo
(必ず先に空のディレクトリを作っておきましょう。)
- Error: Missing language pack for 'Adobe-Japan1' mappingなどのエラーが大量に出る
- C:\Program Files (x86)\Git\bin\astextplain で使われているpdftotextがエラーの元
- Google デスクトップで検索できない<-コンピュータ<-徒然なるままに<-Iranoan に従って、適当な場所にpdftotextをインストール
- C:\Program Files (x86)\Git\bin\pdftotext.exeを削除orリネーム
- git - merge a branch into a new sub directory on the master - Stack Overflow
- ex) git am -p2 --directory=production/ test/*.patch
- -p<n>、--directory=<dir>はいずれもgit applyのオプション
- -pのデフォルトは-p1
rewrite history
- Git の履歴からファイルを完全に削除する – git filter-branch | EasyRamble
- Extracting Parts of Git Repository and Keeping the History
- git subtree - Detach subdirectory into separate Git repository - Stack Overflow
- Git - remove commits with empty changeset using filter-branch - Stack Overflow
- 宇宙をぼくの手の上に: Gitでsubtree mergeによるライブラリ管理
git via https
- どぶお/開発しよう!/Gitクックブック - BioKids Wiki
GitHubにHTTPSでアクセスするとSSL証明書の検証に失敗する
この場合のように新たな証明書をOpenSSLへインストールする方法について解説したページが見つからなかったのでメモしておきます。
- git config --global http.sslCAPath "C:\Program Files (x86)\Git\ssl\certs"
[http] sslCAPath = C:\\Program Files (x86)\\Git\\ssl\\certs
- 手動で追加する場合、以下のように書いてもよい
[http] sslCAPath = 'C:/Program Files (x86)/Git/ssl/certs'
- 手動で追加する場合、以下のように書いてもよい
- 証明書の用意
- $ openssl x509 -inform der -in cacert.cer -out cacert.pem
- $ mv cacert.pem openssl x509 -hash -noout -in cacert.pem.0
- $ ls -l
total 8671524 -rw-r--r-- 1 mitty mitty 1326 Jun 8 02:47 5391e9e0.0 -rw------- 1 mitty mitty 937 Feb 19 10:08 cacert.cer
- C:\Program Files (x86)\Git\ssl\certs にコピー
- うまくいかない
- root証明書ではなくサーバ証明書も追加してみたがだめ
- C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt にBase64形式(この場合上記5391e9e0.0の中身)で追記する方法
でもだめ- この方法では問題なく独自root証明書が使える
いずれも、Unknown SSL protocol error in connection to ... となる- SSL通信で使用できるプロトコルを制限したため、接続に失敗していた模様 (see also wiki:TipAndDoc/ssl#howtosecure)
- SSL certificate problem: unable to get local issuer certificateとなる
- git config --system --unset http.sslCAinfo としてもNG
- UACのために、C:\Program Files (x86)\Git\etc\gitconfigではなく%LOCALAPPDATA%\VirtualStore\Program Files (x86)\Git\etc\gitconfigに書き込まれる点に注意
- git config --global http.sslCAPath "C:\Program Files (x86)\Git\ssl\certs"
- git - SSL certificate rejected trying to access GitHub over HTTPS behind firewall - Stack Overflow
$ env GIT_SSL_NO_VERIFY=true git clone https://github...
git-svn
- Is there an advantage to using --no-metadata in git svn clone? - Stack Overflow
This option is NOT recommended as it makes it difficult to track down old references to SVN revision numbers in existing documentation, bug reports and archives.
- git-svnでSVN上の複数のブランチやtrunkを扱う方法 - Hello, world! - s21g
- Converting svn to git, how to get the branches not to be just remote in the svn repo? - Stack Overflow
convert svn repos to git
- trunk/tags/branches -> -s オプションで拾える
- vendor -> 手動でconfig --addしてfetch
- リモートブランチをローカルブランチへ変更する
- mitty@test:~/works$ git svn init -s http://lab.mitty.jp/svn/lab/ lab
Initialized empty Git repository in /home/mitty/works/lab/.git/
- mitty@test:~/works/lab (master)$ cat .git/config
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [svn-remote "svn"] url = http://lab.mitty.jp/svn/lab fetch = trunk:refs/remotes/trunk branches = branches/*:refs/remotes/* tags = tags/*:refs/remotes/tags/*
- mitty@test:~/works/lab (master)$ git config --add svn-remote.svn.fetch "vendor:refs/remotes/vendor"
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [svn-remote "svn"] url = http://lab.mitty.jp/svn/lab fetch = trunk:refs/remotes/trunk branches = branches/*:refs/remotes/* tags = tags/*:refs/remotes/tags/* fetch = vendor:refs/remotes/vendor
- mitty@test:~/works/lab (master)$ git svn fetch
Checked out HEAD: http://lab.mitty.jp/svn/lab/trunk r204 creating empty directory: TipAndDoc/tools/trac/plugins
- mitty@test:~/works/lab (master)$ ls -1F
Commentary/ Dev/ misc/ TipAndDoc/
- mitty@test:~/works/lab (master)$ git tag -l
- mitty@test:~/works/lab (master)$ git br -a
* master remotes/tags/r89-trunk remotes/tags/snuploader_name remotes/tags/snuploader_name@29 remotes/tags/snuploader_name@36 remotes/tags/twitter remotes/trunk remotes/twitter-0.1 remotes/twitter-0.1@44 remotes/twitter-0.1@65 remotes/twitter-0.1@66 remotes/vendor
- mitty@test:~/works/lab (master)$ ls -1F
- mitty@test:~/works/lab (master)$ mv .git/refs/remotes/tags/* .git/refs/tags/
- mitty@test:~/works/lab (master)$ rmdir .git/refs/remotes/tags/
- mitty@test:~/works/lab (master)$ mv .git/refs/remotes/* .git/refs/heads/
- mitty@test:~/works/lab (master)$ rmdir .git/refs/remotes/
- vim .git/packed-refs
:%s/refs\/remotes\/tags/refs\/tags/g :%s/refs\/remotes/refs\/heads/g
- リポジトリがある程度以上の大きさの場合、必要になる
- .git/packed-refs が存在しない場合はskipしてよい模様
- mitty@test:~/works/lab (master)$ git tag -l
r89-trunk snuploader_name snuploader_name@29 snuploader_name@36 twitter
- mitty@test:~/works/lab (master)$ git br -a
* master trunk twitter-0.1 twitter-0.1@44 twitter-0.1@65 twitter-0.1@66 vendor
- mitty@test:~/works/lab (master)$ git co vendor
Switched to branch 'vendor'
- mitty@test:~/works/lab (vendor)$ ls -1F
DrRacket/ GeSHi-1.0.8.9/ lxc/ OCaml/ SnUploader/ TipAndDoc/ trac/ twitter/ ubuntu/ utvpn/ vmware/
- mitty@test:~/works/lab (master)$ git co vendor
git-http-backend
- git-http-backend(1)
- nginxでgitリポジトリの公開 - Smart HTTPを試してみた - 逆襲のWebエンジニア
- toofishes.net - Git smart HTTP transport on nginx
- Howto Nginx + git-http-backend + fcgiwrap (Debian Squeeze) - Server Fault
- fastcgi_passは最初の方にあっても良い模様
- fastcgi_param SCRIPT_FILENAMEはかならずinclude fastcgi_paramsよりも先に記述しないとダメ(以下の様に意図しない場所へchdirされエラーになる)
FastCGI sent in stderr: "Cannot chdir to script directory (/usr/share/nginx/www/git/test.git/info)"
- Ubuntu 12.04では、fcgiwrapパッケージを導入すると/var/run/fcgiwrap.socketが自動的に作成される
- apache - git-http-backend - Stack Overflow
- trac - git-http-backend, ro for all, write requiring password? (with lighttpd) - Server Fault
- git - git-http-backend: anonymous read, authenticated write
the man-page is wrong
gitweb
- gitweb + Nginx を使ってgitリポジトリをWEBで見られるようにする - Wait at a Street corner
- gitoliteとgitweb on nginx を連携させたメモ - ゆどうふろぐ
- Gitweb on Centos behind Nginx with init script.
- Using git-web with nginx | Jeff's musings
- 以下の様に設定するのがすっきりすると思われる
location /gitweb/ { fastcgi_pass unix:/var/run/fcgiwrap.socket; fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi; include fastcgi_params; }
/gitweb/(.*)を/gitweb(/.*)とすると、リンクが正常に生成されないので注意
gitweb and git-http-backend on same url
- git-http-backend(1)
This can be combined with the gitweb configuration:
SetEnv GIT_PROJECT_ROOT /var/www/git AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 ScriptAliasMatch \ "(?x)^/git/(.*/(HEAD | \ info/refs | \ objects/info/[^/]+ | \ git-(upload|receive)-pack))$" \ /usr/libexec/git-core/git-http-backend/$1 ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/
- Setup Git, Gitweb with git-http-backend / smart http on ubuntu 12.04 | Tikal
- fcgiをインストールしているが、実際には使われていないように読める
- paperlined.org/apps/git/SmartHTTP_Ubuntu.html
- gitweb + git-http-backend + git push with Basic Authentication
- このサイトではRewriteRule (.*) $1 [E=AUTHREQUIRED:yes]としているが、これではQUERY_STRINGが落ちてしまいうまく動かない
- Stuge says.. :: Making nginx serve git-http-backend and gitweb on the same URL
- NGINX Configuration for Gitweb and git-http-backend - Weinimos World
- https://lab.mitty.jp/git/ で実際に用いている設定(Apache2)
RewriteEngine On RewriteCond %{QUERY_STRING} =service=git-receive-pack [OR] RewriteCond %{REQUEST_URI} /git-receive-pack$ RewriteRule /git/ - [E=AUTHREQUIRED:yes] <Location /git> SetEnv GITWEB_CONFIG /etc/gitweb/lab.conf SetEnv GIT_HTTP_EXPORT_ALL SetEnv GIT_PROJECT_ROOT /path/to/projectroot/lab Order Deny,Allow Deny from env=AUTHREQUIRED AuthType Basic AuthName "Authentication for lab.mitty.jp" AuthUserFile /path/to/htpasswd.file Require valid-user Satisfy Any </Location> AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /path/to/projectroot/lab/$1 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /path/to/projectroot/lab/$1 ScriptAliasMatch \ "(?x)^/git/(.*/(HEAD | \ info/refs | \ objects/info/[^/]+ | \ git-(upload|receive)-pack))$" \ /usr/lib/git-core/git-http-backend/$1 Alias /git /usr/share/gitweb <Directory /usr/share/gitweb> Options +ExecCGI DirectoryIndex gitweb.cgi AddHandler cgi-script .cgi </Directory>
- gitweb/git-http-backend を一つのURLでアクセス可能にしている
- git fetchは認証なし、pushは要認証
- https://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html でLocationMatchを用いて説明されている方法は古いため動かない
- man git-http-backend あるいは http://man7.org/linux/man-pages/man1/git-http-backend.1.html などにあるように、mod_rewriteが必要
- Order Deny,Allow、Satisfy Anyなどに注意
- /etc/gitweb/lab.conf
$projectroot = "/var/git/lab"; @git_base_url_list = ($cgi->url(-base => 1) . '/git');
- GITWEB_CONFIGでgitwebインスタンスごとに設定ファイルを指定できる
- man git-http-backendではgitwebはScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/などとしているが、うまく動かない
- /git/?p=lab.gitとなるべきリンクが/git?p=lab.gitとなってしまう
- wiki:TipAndDoc/network/httpd#ScriptAlias にあるように、自身のURLが/で終わらない形になるためと思われる
- Alias + Directoryで対応
prompt
- bash
- Gitを使い始めたらやっておきたい便利な設定いろいろ : アシアルブログ
- source:lab/trunk/TipAndDoc/.gitconfig, source:lab/trunk/TipAndDoc/.bashrc
github
- 初めてPull Requestをマージしてみた - daicham blog
- A-Liaison BLOG: github で pull request をされたとき・するときの手順
- GitHubへpull requestする際のベストプラクティス - hnwの日記
ここで大事な点を強調しておきますが、絶対にmasterブランチで作業してはいけません。また、masterブランチからpull requestを送るのもいけません。必ずpull requestのための別ブランチから送るようにしましょう。