我是git的新手。在我在这个论坛上提问之前,我已经阅读了很多关于清理git Repo的文章。这个网站上建议的解决方案对我没用,删除的目录仍然存在于远程存储库中。完成git repo清理步骤后,当我使用URL(https://hostname/test/FPCNAV_TEST_DATA)访问git repo时,我仍然看到已删除的文件夹(download / 1508)。
目标是从远程git存储库和可用空间中删除旧文件夹。
另外,请解释一下" refs / original"是命令字符串" git for-each-ref --format ='%(refname)'参考文献/原&#34 ;.这是假设我本地.git目录中的文件夹的模式名称还是什么?感谢。
以下是我运行的命令及其压缩输出。请帮忙。
$ /home/john>git clone git@hostname:XYZD/FPCNAV_TEST_DATA
Initialized empty Git repository in /home/john/FPCNAV_TEST_DATA/.git/
...
$ find .git/refs -type f <<<--- Has nothing to do with Repo cleanup
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
$ git filter-branch --force --index-filter 'git rm --cached
--ignore-unmatch download/1508' --prune-empty --tag-name-filter cat -- --all
Rewrite 04f4ba443b1f939a05592c5af174456b7076fa0b (2/4)
...
Rewrite 33c7db2e753af4ef8ae392274ca9f09af5c928ad (3/4)
..
Rewrite 1019e38ffc7b1739d7f4c4c94cd68884a12c5e54 (4/4)
...
WARNING: Ref 'refs/heads/master' is unchanged
WARNING: Ref 'refs/remotes/origin/master' is unchanged
WARNING: Ref 'refs/remotes/origin/master' is unchanged
$for ref in $(git for-each-ref --format='%(refname)' refs/original);
do git update-ref -d $ref; done
$git push origin master --force
Enter passphrase for key '/home/john/.ssh/id_rsa':
Everything up-to-date
$git reflog expire --expire=now --all
$git gc --prune=now
Counting objects: 28, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (28/28), done.
Total 28 (delta 1), reused 28 (delta 1)
$git push origin --force --all
Enter passphrase for key '/home/john/.ssh/id_rsa':
Everything up-to-date
$git push origin --force --tags
Enter passphrase for key '/home/john/.ssh/id_rsa':
Everything up-to-date
答案 0 :(得分:1)
目标是从远程git存储库和可用空间中删除旧文件夹。
您有两个主要选项
git filter-branch
BFG
BFG Repo-Cleaner
git-filter-branch的替代品。
BFG是git-filter-branch的一种更简单,更快速的替代方法,用于清除Git存储库历史记录中的错误数据:
- 删除疯狂的大文件
- 删除密码,凭证和密码其他私人数据
在所有这些示例中,bfg是java -jar bfg.jar的别名。
# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa} my-repo.git
您决定使用git filter-branch
另外,请在命令字符串
refs/original
中解释git for-each-ref --format='%(refname)' refs/original
的用途。这是假设我本地.git目录中的文件夹的模式名称还是什么?
ref/original
强> 这些是由filter-branch
制作的备份引用。他们是您决定退出的情况,或者如果您做错了以致原始参考不会被损坏。
如果您想手动删除它们,请使用:
# Remove the original refs backed up by git-filter-branch:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
这些引用确实在您的.git
文件夹下。如上所述,它们由git filter-branch