相关疑难解决方法(0)

将(移动)子目录分离到单独的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存储库大小

我试图寻找一个关于减少回购规模的好教程,但没有找到.我如何减少我的repo大小...它大约10 MB,但事情是Heroku只允许50 MB,我不在附近完成开发我的应用程序.

我已经将通常的嫌疑人(日志,供应商,文档等)添加到.gitignore.虽然我最近只添加了.gitignore.

有什么建议?

git git-clean

267
推荐指数
3
解决办法
12万
查看次数

$ @在shell脚本中意味着什么?

@在shell脚本中,一个美元符号后跟一个at符号()意味着什么?

例如:

umbrella_corp_options $@
Run Code Online (Sandbox Code Playgroud)

unix linux bash shell sh

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

如何从我的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 pull error:无法创建临时sha1文件名

我有一个小的git repo设置,唯一真正的目的是能够在几台机器(工作,家庭,笔记本电脑)上进行本地开发.因此,我有一个分支,一旦我离开计算机,我提交/推动,拉一下我坐下 工作得很好,到现在为止.现在当我拉上我的"实时测试"机器时,我得到以下信息:

remote: Counting objects: 38, done.
remote: Compressiremote: ng objects: 100% (20/20), done.
remote: Total 20 (delta 17), reused 0 (delta 0)
error: unable to create temporary sha1 filename .git/objects/ed: File exists

fatal: failed to write object
fatal: unpack-objects failed
Run Code Online (Sandbox Code Playgroud)

在网上搜索我能找到的唯一真正的答案如下:http://marc.info/? l = git&m = 122720741928774&w = 2,它基本上表明这是一个虚假的错误,它在堆顶上,因此没有说什么关于什么是真的错了.

我从哪里可以找出问题所在?

编辑:删除本地副本并重新克隆

git

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

如何最好地压制旧的提交

最近离开的一位开发人员在几个月前的回购中留下了大量的提交,就像"更新"一样.理想情况下,我想将它们压缩成一个提交,但我只是为最近的提交做了这个.

我将如何做以下提交(假设从2个月前意味着有数百个)?

....从2个月前

aabbcc updated
aabbdd updated
aabbee updated
aabbff updated
Run Code Online (Sandbox Code Playgroud)

不想/需要任何花哨的东西,只是一个简单的解决方案.这些提交尚未公开分享(除了我今天以外),因此不会扰乱其他人的提交历史.

git git-squash

14
推荐指数
2
解决办法
8082
查看次数

为什么git不会进一步减少存储库大小?

我有一个只有一个提交的存储库,其签出大小为95M.但是,我无法获得低于213M的.git文件夹大小.但是,如果我创建一个具有相同文件内容的新存储库,我会得到一个只有38M的.git文件夹.

有没有办法git重建它的对象,以便在创建新的存储库时获得更符合图形的大小?

我尝试了两种方法git gc --prune=now --aggressivegit repack -adf --window=250 --depth=250减少了存储库大小.他们将存储库从最初的220M下调.

我想git必须保留一个防止垃圾收集的引用,但我不知道它们会在哪里.我已经删除了所有的遥控器和分支机构,除了'refs'下我目前的分支机构之外我什么都看不到

$ ls -R .git/refs
.git/refs/:
heads  tags

.git/refs/heads:
master

.git/refs/tags:
Run Code Online (Sandbox Code Playgroud)

我从具有更长历史的现有存储库创建了存储库.我曾经checkout --orphan创建一个新的无基础分支,然后做了一个提交,用存储库的状态创建一个新的提交.然后我删除了原始分支并在运行之前删除了遥控器gc.

$ git --version
git version 1.9.4.msysgit.0
Run Code Online (Sandbox Code Playgroud)

git garbage-collection

6
推荐指数
1
解决办法
1806
查看次数

删除本地存储库中的历史记录,而不是使用--depth 1再次克隆它

标题基本上.

我只是混一些事情与我.gitignore和我的臃肿.gitDIR到> 100MB(它与总喜欢100commits回购..).

所以我是一个懒惰的人,并想知道是否有可能删除我的历史.我不想改变某些东西或东西,我只是想缩小我的.git目录尺寸.

当没有办法做到这一点时,我只是让git clone --depth 1我的回购获得同样的效果.

git

6
推荐指数
1
解决办法
512
查看次数

从 git 历史记录中删除了目录及其文件,但 PACK 文件仍然包含文件

我想从 git 存储库的历史记录中删除一个目录及其内容,以减小此 git 存储库的大小。(该目录包含二进制资产,例如模型和纹理,并且迄今为止对 git 存储库的大小贡献最大。)

我对上一个问题使用了以下解决方案

git filter-branch --tree-filter 'rm -rf the_directory' --prune-empty HEAD
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
echo the_directory/ >> .gitignore
git add .gitignore
git commit -m 'Removing the_directory from git history'
git gc
git push origin master --force
Run Code Online (Sandbox Code Playgroud)

这似乎有效,因为我在 Github 上的提交历史记录中再也找不到对该目录及其内容的任何引用。(我有超过 1500 次提交,目录总是在那里,但不再存在。我什至找不到我明确删除目录的提交(从存储库但不是从历史记录中)。)

不幸的是,根据 Github,存储库的大小没有改变。我仍然有一个PACK450MB的文件(而实际存储库现在低于 14MB)。

我使用以下git命令来查找最大的文件:

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
git rev-list …
Run Code Online (Sandbox Code Playgroud)

git

6
推荐指数
1
解决办法
409
查看次数

如何归档旧的git标签?

我的git储存库中有一些旧标签不再重要。我想将标签存档,以便在运行git标签时默认情况下不显示它们。我不想删除它们,因为我想保留历史记录。我怎样才能做到这一点?

git

5
推荐指数
2
解决办法
1062
查看次数