2019/05/28

・git clone が重い
・秘密のファイルを Commit してしまった

など、過去にファイルを Commit & Pull してしまった場合、問題ファイルをなかったことにしたい場合があります。

履歴の削除は「git filter-branch」を利用してできますが、破壊的に履歴変更するため事前バックアップするなど作業は自己責任で行ってください。

PHPサンプルスクリプト

destory_git_history.php

オブジェクト容量の大きいファイルを検出

git_find_big.sh で大きなオブジェクトを抽出


$ du -sh .git/objects 12M .git/objects
$ sh git_find_big.sh

「git_find_big.sh」は、gitコマンドを用いて「.git/objects/pack/pack」内の容量の多いオブジェクト順で抽出します。

履歴を抹消

抽出したファイルやディレクトリを削除 (refs/heads/master と refs/remotes/origin/master を書き換え)
※ディレクトリの場合は「git rm -r」


$ git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch ファイルパス' --prune-empty -- --all

ガベージコレクションを利用して、不要なオブジェクトやログを削除します。


$ git gc --aggressive --prune=now

git オブジェクトのリパックします。


$ git repack -A -d

強制的にPush


$ git push --force origin master

共同作業している場合は、clone してもらった方が安全かもしれません。

  2019/05/28
Gitignore にファイルを記述しても反映されない場合、キャッシュをクリアして commit & push してみる。
$ git rm -r --cached .bash_profile rm '.bash_profile'
ファイル名に「.」を指定して、全ファイルをターゲットにする事もできるが、ちょっと怖いので1ファイルずつ実行した。

  2011/12/01
会社で、SVN から Git に移行する流れになってきたので、今更ながら Git の基本をメモ。 手当たり次第なので、ところどころ間違いがあるかと思います。

リモート(origin)でリポジトリ作成

$ mkdir プロジェクト名 $ cd プロジェクト名 $ git init --bare --shared=true $ git --bare update-server-info

これで空のリポジトリが作成と、WebDav経由での公開設定

ローカル(master)

Titanium Studio の Team で AptanaGit を利用しようとしたが、どうにもこうにも作業コピーできない(?)ので、手動でコマンドすることに。

$ git clone http://サーバ/git/プロジェクト名

ローカルで Commit

TitaniumStudio に戻り Team > Commit を選択 TitaniumStudio Git コメントを入れて、Commit したいファイルを、Unstaged Changes から staged Changes に移動して【Commit】 TitaniumStudio Git

リモートに push

リモート(origin) を選択すると push、SVN で言うリポジトリへの Commit となります。 TitaniumStudio Git TitaniumStudio ではコンソール上で赤文字(デフォルト色)で表示されるので、エラーが出たかと勘違いしますが、問題なく push できました。 コマンドだと大体こういう流れになるでしょうか?

$ git add 追加ファイル $ git add . $ git commit -m 'コメント' $ git remote add origin http://リモートサーバ/git/プロジェクト名 $ git push origin master

<< Top < Prev Next > Last >>