相关疑难解决方法(0)

如何删除子模块?

如何删除Git子模块?

顺便说一句,有什么理由我不能干脆做到 git submodule rm whatever吗?

git git-submodules

3366
推荐指数
31
解决办法
83万
查看次数

将(移动)子目录分离到单独的Git存储库中

我有一个Git存储库,其中包含许多子目录.现在我发现其中一个子目录与另一个子目录无关,应该分离到一个单独的存储库.

如何在将文件的历史记录保存在子目录中的同时执行此操作?

我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会给我一个完整的树,当检查旧版本等.这可能是可以接受的,但我宁愿能够假装两个存储库没有共享历史记录.

为了说清楚,我有以下结构:

XYZ/
    .git/
    XY1/
    ABC/
    XY2/
Run Code Online (Sandbox Code Playgroud)

但我想这样做:

XYZ/
    .git/
    XY1/
    XY2/
ABC/
    .git/
    ABC/
Run Code Online (Sandbox Code Playgroud)

git git-filter-branch git-subtree

1712
推荐指数
15
解决办法
25万
查看次数

有没有办法清理git?

似乎我的项目随着每个git变得越来越大commit/push.有没有办法清理我的git文件夹?

git

152
推荐指数
6
解决办法
17万
查看次数

为什么我的git存储库这么大?

145M = .git/objects/pack /

我编写了一个脚本来添加每个提交和提交的差异大小,然后再从每个分支的尖端向后移动.我得到129MB,没有压缩,没有分支机构的相同文件和分支机构之间的共同历史记录.

Git考虑了所有这些因素,所以我期望更小的存储库.那么为什么.git这么大?

我弄完了:

git fsck --full
git gc --prune=today --aggressive
git repack
Run Code Online (Sandbox Code Playgroud)

要回答有多少文件/提交,我有19个分支,每个文件大约有40个文件.287次提交,发现使用:

git log --oneline --all|wc -l
Run Code Online (Sandbox Code Playgroud)

它不应该使用10兆字节来存储有关此信息.

git

131
推荐指数
6
解决办法
8万
查看次数

如何从我的git仓库中删除未引用的blob

我有一个GitHub仓库,有两个分支 - 主和发布.

发布分支包含二进制分发文件,这些文件导致了非常大的repo大小(> 250MB),所以我决定清理一下.

首先,我删除了远程发布分支 git push origin :release

然后我删除了本地发布分支.首先我试过git branch -d release,但是git说"错误:分支'释放'不是你当前HEAD的祖先." 这是真的,所以我git branch -D release强迫它被删除.

但是我在本地和GitHub上的存储库大小仍然很大.所以然后我浏览了通常的git命令列表,比如git gc --prune=today --aggressive没有运气.

按照Charles Bailey在SO 1029969的指示,我得到了最大blob的SHA1列表.然后我使用来自SO 460331的脚本 来找到blob ......并且五个最大的不存在,虽然找到了较小的blob,所以我知道脚本正在工作.

我认为这些博客是发布分支中的二进制文件,它们在删除该分支后不知何故.什么是摆脱它们的正确方法?

git

113
推荐指数
6
解决办法
7万
查看次数

如何收缩.git文件夹

我目前的基数总大约是.200MB.

但我的.git文件夹有5GB(!)的惊人大小.因为我把我的工作推到外部服务器,我不需要任何大的本地历史......

如何缩小.git文件夹以释放笔记本上的一些空间?我可以删除超过30天的所有更改吗?

非常感谢任何帮助:)

git

112
推荐指数
6
解决办法
5万
查看次数

删除git创建的大型.pack文件

我检查了一大堆文件到一个分支并合并,然后不得不删除它们,现在我留下了一个大的.pack文件,我不知道如何摆脱.

我删除了所有使用的文件git rm -rf xxxxxx,我也运行了该--cached选项.

有人能告诉我如何删除当前位于以下目录中的大型.pack文件:

.git/objects/pack/pack-xxxxxxxxxxxxxxxxx.pack

我只需要删除我仍然拥有但不再使用的分支吗?或者我还需要运行其他东西吗?

我不确定它有多大差别,但它显示了一个挂锁文件.

谢谢


编辑

以下是我的bash_history的一些摘录,它应该让我知道我是如何设法进入这种状态的(假设我正在开发一个名为'my-branch'的git分支,我有一个包含更多文件夹的文件夹/文件):

git add .
git commit -m "Adding my branch changes to master"
git checkout master
git merge my-branch
git rm -rf unwanted_folder/
rm -rf unwanted_folder/     (not sure why I ran this as well but I did)
Run Code Online (Sandbox Code Playgroud)

我以为我也运行了以下内容,但它没有出现在bash_history中与其他人:

git rm -rf --cached unwanted_folder/
Run Code Online (Sandbox Code Playgroud)

我还以为我运行了一些git命令(比如git gc)来尝试整理包文件,但它们也没有出现在.bash_history文件中.

git pack branching-and-merging

90
推荐指数
6
解决办法
8万
查看次数

如何从git存储库中删除未使用的对象?

我不小心添加,提交并推送了一个巨大的二进制文件,我最近提交了一个Git存储库.

如何让Git删除为该提交创建的对象,以便我的.git目录再次缩小到合理的大小?

编辑:谢谢你的回答; 我试过几个解决方案.没有用.例如,GitHub中的文件从历史记录中删除了文件,但.git目录大小没有减少:

$ BADFILES=$(find test_data -type f -exec echo -n "'{}' " \;)

$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $BADFILES" HEAD
Rewrite 14ed3f41474f0a2f624a440e5a106c2768edb67b (66/66)
rm 'test_data/images/001.jpg'
[...snip...]
rm 'test_data/images/281.jpg'
Ref 'refs/heads/master' was rewritten

$ git log -p # looks nice

$ rm -rf .git/refs/original/
$ git reflog expire --all
$ git gc --aggressive --prune
Counting objects: 625, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (598/598), done. …
Run Code Online (Sandbox Code Playgroud)

git binary file object

81
推荐指数
8
解决办法
6万
查看次数

从git存储库中删除文件(历史记录)

(解决了,看到问题正文的底部)现在
寻找这个,我现在拥有的是:

几乎相同的方法,但它们都将对象留在包文件中......坚持.
我尝试了什么:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
Run Code Online (Sandbox Code Playgroud)

包中还有文件,这就是我所知道的:

git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3
Run Code Online (Sandbox Code Playgroud)

还有这个:

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune
Run Code Online (Sandbox Code Playgroud)

相同...

尝试过的git clone技巧,它删除了一些文件(约3000个)但最大的文件仍然存在...

我在存储库中有一些大的遗留文件,大约200M,我真的不希望它们在那里...而且我不想将存储库重置为0 :(

解决方案:这是摆脱文件的最短路径:

  1. 检查.git/packed-refs - 我的问题是我有refs/remotes/origin/master一个远程存储库的行,删除它,否则git将不会删除这些文件
  2. (可选) git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort …

git version-control git-rewrite-history

76
推荐指数
4
解决办法
3万
查看次数

如何清理.git文件夹?清理了我的项目目录,但.git仍然庞大

删除数百兆字节的意外生成的垃圾后,我的rails项目目录中的.git /对象仍然庞大.

我已经尝试过git add -A,以及其他命令来更新索引并删除不存在的文件.我收集,也许是错误的,目录中有两个字符名称的文件是blob.我曾尝试回滚以前的提交,但没有运气.

我该怎么做才能清理这个目录?

git

72
推荐指数
4
解决办法
4万
查看次数