Search Results: tag:git

251 件ヒットしました。 11 - 20 番目を表示しています。

git git-commit git commit --amend で修正するときに author timestamp を更新する

コミットを作成した author のタイムスタンプ(git log とすると表示される)と コミットしたときの committer のタイムスタンプがある。

git commit --amend

とすると author のタイムスタンプはそのままで、 committer のタイムスタンプがコマンドを実行したときの時刻になる。

author のタイムスタンプを committer のタイムスタンプに合わせる(更新する)には --reset-author オプションをつける。

git commit --amend

git gitignore .gitignore のカレントディレクトリにあるファイルだけを無視する

.gitignore に

config.h

とかくと同じディレクトリにある config.h だけでなく dir/config.h なども無視するようになる。 これを前者だけに制限するには

/config.h

と書く必要がある。

git git-filter-branch すべてのコミットから特定のファイルを削除する

あるコミットからファイルを削除するなら git rebase を使うのだが、 すべてのコミットからファイルを削除するには git filter-branch を使う。

git filter-branch --tree-filter 'rm -f file.txt' HEAD

とする。ディレクトリなら

git filter-branch --tree-filter 'rm -rf path/to/dir' HEAD

のようにすればよい。

もちろん、これは過去のコミットを書き換える操作なので、 他の人と共有しているリポジトリなどで実行すると困ったことになるので注意。

git git-clone git のディレクトリを他のディレクトリに配置する

オプション「--separate-git-dir」に git のファイルを置くディレクトリを指定する。

git clone --separate-git-dir git_dir http://example.com/repo.git

ディレクトリ repo がワーキングディレクトリで ディレクトリ git_dir には git のファイルが保存されている。

git git-submodule ローカルのリポジトリからオブジェクトを借りるようにサブモジュールを設定する

git submodule に git clone と同じ「--reference」オプションがある。

git submodule add --reference /path/to/local_repo git://example.com/repo.git

とすると git clone と同様にローカルリポジトリを参照したサブモジュールができる。

git clone と同様にオブジェクトを借りたリポジトリにおいて オブジェクトを削除するとリポジトリが壊れるので注意が必要。

git git-clone ローカルにすでにダウンロードしたリポジトリを利用してリモートから取得するオブジェクトを減らす

あるリモートリポジトリを複数個複製する場合に refarence repository を利用することで ネットワークアクセスを減らすことができる。

git clone https://example.com/repo.git repo_first

とすると repo_first にリポジトリがダウンロードされる。 同じリポジトリを複製する場合に「--reference」オプションで repo_first を指定すると、まずrepo_first からオブジェクトを探し、 ない場合はリモートリポジトリから取得することになる。

git clone --reference /path/to/repo_first https://example.com/repo.git repo_second

repo_second の .git/objects/info/alternates を見ると repo_first へのパスが指定されている。

以降、repo_second で

git fetch
git pull

などを実行する場合も同じようにオブジェクトを探して取得するはずなので、 repo_first を更新してから repo_second を実行した方が効率が良い(と思う)。

git clone の「--shared」オプションで複製したリポジトリと同様に ソースとなったリポジトリでのオブジェクトの削除に注意する必要がある。 よくわからなければ、このオプションは使用してはいけない。

git git-clone ローカルのリポジトリの .git/objects をハードリンク以外で共有する

ローカルのリポジトリに対して

git clone -s /path/to/repo

とするとカレントディレクトリに repo が作られるのだが、 その中の .git/objects がソースとなったリポジトリと共有される。 具体的には .git/objects にファイルがなく、 .git/objects/info/alternates でソースのリポジトリが指定される。

(私自身も動作を把握しきれているとは言えないが) この操作はなにをやっているのか理解していないと危険。 ソースのリポジトリでブランチを削除したり、 (他のコマンドで自動で実行されることもある)git gc などで オブジェクトが削除されたり、参照がなくなったりすると コピーしたリポジトリが壊れるかもしれない。

git git-clone ローカルにあるリポジトリを複製する

git clone /path/to/repo

とすると /path/to/repo にあるリポジトリがカレントディレクトリに複製される。 ローカルのパスが対象のとき、デフォルトでは -l または --local オプションの動作になり、 可能ならば、ディスクスペースの節約のために .git/objects ディレクトリ以下のファイルはハードリンクされる。

ls -i /path/to/repo/.git/objects/03
ls -i ./repo/.git/objects/03

のようするとハードリンクされていることを確認することができる。

通常の複製の動作にするには「--no-local」オプションをつける。

git clone --no-local /path/to/repo

また、ハードリンクだけを無効にするには「--no-hardlinks」オプションをつける。 この操作はバックアップを作成する用途に適している。

git clone --no-hardlinks /path/to/repo

注意: 「--no-local」と「--no-hardlinks」オプションの違いは、 git-clone のマニュアルだけではわからなかった。

git git-log 二つのコミット間の差のコミットログを表示する

ブランチ master と customize の片方にしかないコミットログを 表示するには

git log master...customize

とする。コミットがどちらのものなのかを表示するには 「--left-right」オプションをつける。

git log --left-right master...customize

ハッシュ値のところに「>」と「<」で表示される。

git git-stash git-apply 適用した stash の状態を取り消す

特別なコマンドはないのでパッチ形式で表示した結果をパイプで git apply -R に渡す。

git stash apply

で stash の最後の状態を適用したとする。このときに、この適用を取り消すには

git stash show -p | git apply -R

とすればよい。