2017-01-21 74 views
0

我跟着重构文件和文件夹到一个新的git仓库

Detach (move) subdirectory into separate Git repository

了潜在的解决方案我的要求是相似的,但只是略有不同希望有人能提供一些简单的解决方案。

说我有以下回购:

node-browser-compat 
├── ArrayBuffer 
├── Audio 
├── Blob 
├── FormData 
├── atob 
├ ├──aaa.xyz 
├── btoa 
├── location 
└── navigator 

我想有具有所有btoaaaa.xyz它同时保留两个btoaaaa.xyz历史上的一个新的回购abcd。 任何帮助将不胜感激。

注意:如果我已经有一个名为abcd的空回购,将btoaaaa.xyz移动到abcd的说明也有帮助。

+0

感谢编辑@丹罗威,看起来正是我想要它。我做不到。 – Ananth

回答

0

如果你有一个稍长的历史或largeish worktree,如果你避免不必要的,这将是显着快搅动。

在最快的文件系统,你可以找到一个临时ref-surgery回购,这是一个tmpfs(在Windows上你想要安装一个“RAM磁盘”,ImDisk已为我工作得很好)。

scratch=`mktemp -dt` 
git init --template='' $scratch 
cd !$ 
echo /path/to/your/node-browser-compat/.git/objects >.git/objects/info/alternates 

做一个随机数结账,然后设置你的所有分支裁判:

git checkout $(git commit-tree $(git mktree <&-) <&-) 
git fetch /path/to/your/node-browser-compat/ --no-tags +refs/heads/*:refs/heads/* 

现在你可以改写你想要一个完全免费的手什么 - 如果有什么错,只是放弃和rm -rf。

git filter-branch --index-filter ' 
     git read-tree --empty 
     git reset -q $GIT_COMMIT atob/aaa.xyz btoa 
' -- --all -- atob/aaa.xyz btoa 

您可以将结果的任何部分克隆或推送到任意位置。

在一个4年历史的中端芯片(3570K)上,花了大约五分钟时间来完成git的所有十年历史,重写了11924次提交,约占总数的四分之一,恰巧改变了t ests目录或builtin/var.c

(编辑:更换origin与实际的路径,远程名称是从早期版本缓缴)

+0

'code' 重写...(1/189)(0秒过去了,剩下0个预测)/ usr/lib/git-core/git-filter-branch:第372行:读取树:找不到命令 用法:复位[选项] [终端] 选项: -c组控制字符 -e CH擦除字符 -I没有初始化字符串 -i CH中断字符 -k CH杀字符 -m映射映射标识符键入 -Q不输出控制键设置 -r stderr上的显示项 -s输出TERM设置命令 -V打印curses版本 -w设置窗口大小 in dex filter failed: > git read-tree --empty 'code' – Ananth

+0

感谢您的回复 在git filter-branch上得到了上面的结果...命令 – Ananth

+0

当你尝试它时看起来像一个错字,没有办法它无法找到'git read-tree',并且抱怨无法找到'read-tree',所以我在考虑某种类型的转录错误。 – jthill

0

也许我们有多个解决方案,但我提出这个解决方案: 既然你没有提及分支,我想你只有一个分支。

创建一个名为abcd一个新的空Git仓库,https://example.com/USERNAME/abcd.git

克隆node-browser-compatabcd

git clone URL_of_node-browser-compat 
git remote set-url origin https://example.com/USERNAME/abcd.git 
git push -u origin master 

裁剪不必要的文件夹/文件:

git filter-branch --tree-filter 'rm -rf ArrayBuffer' --prune-empty HEAD 
git filter-branch --tree-filter 'rm -rf Audio' --prune-empty HEAD 
git filter-branch --tree-filter 'rm -rf Blob' --prune-empty HEAD 
git filter-branch --tree-filter 'rm -rf FormData' --prune-empty HEAD 
git filter-branch --tree-filter 'rm -rf location' --prune-empty HEAD 
git filter-branch --tree-filter 'rm -rf navigator' --prune-empty HEAD 

如果目录/文件夹atob已超过1项aaa.xyz,让其他文件夹/文件在同一个w中修剪唉。 然后推到存储库abcd

git add -A . 
git push 

参考

https://help.github.com/articles/changing-a-remote-s-url/

https://git-scm.com/docs/git-filter-branch

相关问题