我恐怕找不到任何类似这种特殊场景的东西.
我有一个有很多历史的git存储库:500多个分支,500多个标签,可以追溯到2007年中期.它包含~19,500次提交.我们想在2010年1月1日之前删除所有历史记录,以使其更小更容易处理(我们将在存档库中保留历史记录的完整副本).
我知道我想要成为新存储库的根目录的提交.但是,我不能找出正确的git mojo来截断repo以从那个提交开始.我猜的是一些变种
git filter-branch
Run Code Online (Sandbox Code Playgroud)
涉及移植是必要的; 它也可能是必要的对待每一个我们要分别保持在200多个分支机构,然后修补回购重新走到一起(这是我不知道该怎么做).
有没有人做过这样的事情?如果重要的话,我有git 1.7.2.3.
假设我有一个包含此目录结构的仓库:
repo/
blog/
_posts/
some-post.html
another-file.txt
Run Code Online (Sandbox Code Playgroud)
我想移动_posts
到repo的顶层,所以结构将如下所示:
repo/
_posts/
some-post.html
another-file.txt
Run Code Online (Sandbox Code Playgroud)
这是够简单的git mv
,但我想使历史看起来好像_posts
总是在回购的根源存在,我希望能够得到的全部历史some-post.html
通过git log -- _posts/some-post.html
.我想我可以用一些魔法git filter-branch
来完成这个,但我还没弄清楚到底是怎么做到的.有任何想法吗?
可能重复:
如何在保留子目录的同时拆分git存储库?
有一次,我将我的代码添加到现有的git repo中,并且已经承诺了很多,因为其他开发人员已经提交到repo中的其他现有文件. 现在我想将我的代码拆分为自己的repo,但保留我的特定文件的所有更改历史记录.
通过阅读其他人为分割代码所做的工作,我正在查看filter-branch
和执行--index-filter
或--tree-filter
使用rm
命令来查找我不关心的文件.我不想使用,--subdirectory-filter
因为它不适合将我的代码保存为topdir的子目录(我们也共享一个子目录).更复杂的是,原始存储库中的一些文件随着时间的推移已经移动了一些,并且有一些文件被创建然后被删除.这使得设计一个rm列表有点......具有挑战性.
我正在寻找一种方法来过滤所有/除了/文件/目录列表.有人知道这样做的方法吗?
我正在按照此答案从 git 历史记录中删除包含凭据的单个文件。我有 git 2.35.1 和filter-repo 22826b5a68b6。我需要的命令显然是:
\ngit-filter-repo --path auth.json --invert-paths\n
Run Code Online (Sandbox Code Playgroud)\n如果我尝试将此应用到我的工作存储库,我会收到此错误:
\nAborting: Refusing to destructively overwrite repo history since\nthis does not look like a fresh clone.\n(expected freshly packed repo)\n
Run Code Online (Sandbox Code Playgroud)\n因此,我使用 检查了一个新副本git clone
,并且该命令成功运行:
Parsed 861 commits\nNew history written in 0.69 seconds; now repacking/cleaning...\nRepacking your repo and cleaning out old unneeded objects\nHEAD is now at 7212384 Update app.css\nEnumerating objects: 8203, done.\nCounting objects: 100% (8203/8203), done.\nDelta compression using up to 24 threads\nCompressing objects: …
Run Code Online (Sandbox Code Playgroud) 我有一个带有几个目录的git仓库和一个文件MyFile.ext
.
/
LargeDir1/
LargeDir2/
LargeDir3/
.
.
.
MyFile.ext
Run Code Online (Sandbox Code Playgroud)
我想在其中开始一个新的回购MyFile.ext
,并保留所有与之相关的历史,但忽略其他一切(所有的LargeDir
s).我怎样才能做到这一点?
对于目录,我已成功使用此答案,但我在单个文件上尝试过,但它不起作用.
我也尝试过这个答案,除了我的文件外,它确实删除了所有内容,但它似乎也留下了所有的历史.
例如,假设我有存储库 1 和存储库 2。存储库 1 有一个文件/a/b/c/d
。我可以将此文件作为 导入到存储库 2 中吗/e/f/g/h
?
原因是我想从不同的 git 存储库的实验分支中提取更改。我尝试将所有内容合并在一起,但存在大量(各种)冲突。因此,我怀疑我是否可以合并整个分支,但我想尝试尽可能多地引入。
有什么方法可以做我想做的事情,或者我只能直接复制文件吗?