履歴 - git 巨大ファイル 削除




filter-branch--tree-filterの後にgit repoからrefs/original/heads/masterを削除しますか? (2)

Windows PowerShellの場合:

git for-each-ref --format="%(refname)" refs/original/ | foreach-object -process { git update-ref -d $_ }

私はここで尋ねられたのと同じ質問をしました: ルートディレクトリ内の新しいgitリポジトリは、サブディレクトリ内に存在するリポジトリを包含します

私はここでこの答えに従った: ルートディレクトリ内の新しいgitリポジトリは、サブディレクトリ内に存在するリポジトリを包含する

さて、 gitk --allは2つの履歴を表示します:1つは現在のmasteroriginal/refs/heads/master 、もう1つはoriginal/refs/heads/masterと名付けられます。

私はこの第二の歴史が何であるか、それをレポから取り除く方法を知らない。 私は自分のリポジトリに2つの履歴は必要ありません。

どのように私はそれを取り除くのですか?

あなた自身を再現するには:

mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3 
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'

今、オリジナルのポスターの問題があります。 上にリンクされた答えを使ってgit repoのルートをproject-rootに移動しましょう:

git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard

今、私の現在の問題を見てください:

gitk --all &
git show-ref

refs/original/heads/masterと関連するすべての履歴をrefs/original/heads/masterするにはどうすればよいですか?


filter-branchは、リポジトリがreflogとガベージコレクトをクリーンアップするためにバックアップを保持します。 削除する前にこのバックアップに必要がないことを確認してください:

rm -Rf .git/refs/original
git gc --aggressive --prune=now




git-plumbing