我有一个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) 我试图寻找一个关于减少回购规模的好教程,但没有找到.我如何减少我的repo大小...它大约10 MB,但事情是Heroku只允许50 MB,我不在附近完成开发我的应用程序.
我已经将通常的嫌疑人(日志,供应商,文档等)添加到.gitignore.虽然我最近只添加了.gitignore.
有什么建议?
@在shell脚本中,一个美元符号后跟一个at符号()意味着什么?
例如:
umbrella_corp_options $@
Run Code Online (Sandbox Code Playgroud) 我有一个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 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,它基本上表明这是一个虚假的错误,它在堆顶上,因此没有说什么关于什么是真的错了.
我从哪里可以找出问题所在?
编辑:删除本地副本并重新克隆
最近离开的一位开发人员在几个月前的回购中留下了大量的提交,就像"更新"一样.理想情况下,我想将它们压缩成一个提交,但我只是为最近的提交做了这个.
我将如何做以下提交(假设从2个月前意味着有数百个)?
....从2个月前
aabbcc updated
aabbdd updated
aabbee updated
aabbff updated
Run Code Online (Sandbox Code Playgroud)
不想/需要任何花哨的东西,只是一个简单的解决方案.这些提交尚未公开分享(除了我今天以外),因此不会扰乱其他人的提交历史.
我有一个只有一个提交的存储库,其签出大小为95M.但是,我无法获得低于213M的.git文件夹大小.但是,如果我创建一个具有相同文件内容的新存储库,我会得到一个只有38M的.git文件夹.
有没有办法git重建它的对象,以便在创建新的存储库时获得更符合图形的大小?
我尝试了两种方法git gc --prune=now --aggressive并git 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) 标题基本上.
我只是混一些事情与我.gitignore和我的臃肿.gitDIR到> 100MB(它与总喜欢100commits回购..).
所以我是一个懒惰的人,并想知道是否有可能删除我的历史.我不想改变某些东西或东西,我只是想缩小我的.git目录尺寸.
当没有办法做到这一点时,我只是让git clone --depth 1我的回购获得同样的效果.
我想从 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储存库中有一些旧标签不再重要。我想将标签存档,以便在运行git标签时默认情况下不显示它们。我不想删除它们,因为我想保留历史记录。我怎样才能做到这一点?