从克隆的git中删除文件夹Repo不会从远程存储库中删除文件夹

时间:2016-04-23 19:36:47

标签: git

我是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

1 个答案:

答案 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

enter image description here

您决定使用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

使用和管理