将子目录(已重命名!)分离到新的存储库中

2023-11-27

我有一个存储库,我想将其目录之一分离到一个新的存储库中。This是一个完美的起点,但是有一个警告:我想要分离的目录在某个时候被重命名。如果我按照该帖子中的解决方案使用目录的新名称,那么我似乎会丢失重命名之前的历史记录。有什么想法可以调整以使其在这种情况下发挥作用吗?


git filter-branch可以对提交范围进行操作;所以我们能做的就是分别过滤“之前”和“之后”,然后使用移植将它们粘在一起:

git branch rename $COMMIT_ID_OF_RENAME 
git branch pre-rename rename~
## First filter all commits up to rename, but not rename itself
git filter-branch --subdirectory-filter $OLDNAME pre-rename
## Add a graft, so our rename rev comes after the processed pre-rename revs
echo `git rev-parse rename` `git rev-parse pre-rename` >> .git/info/grafts
## The first filter-branch left a refs backup directory. Move it away so the
## next filter-branch doesn't complain
mv .git/refs/original .git/refs/original0
## Now filter the rest
git filter-branch --subdirectory-filter $NEWNAME master ^pre-rename
## The graft is now baked into the branch, so we don't need it anymore
rm .git/info/grafts

如果您需要过滤多个分支或标签,这会稍微复杂一些;重命名之前的分支可以包含在第一个过滤器分支中,而之后的分支必须包含在重命名之前^rename在第二个过滤器分支中。

另一种选择是添加索引过滤器(或树过滤器)来检查旧目录和新目录,并保留存在的目录。

由于您尚未提供测试存储库,因此这里有一个针对此场景的快速健全性检查脚本:

#!/bin/bash

set -u
set -e
set -x

rm -rf .git x y foo

git init
mkdir x
echo initial > x/foo
git add x/foo
git commit -m 'test commit 1'

echo tc2 >> x/foo
git commit -a -m 'test commit 2'

mv x y
git rm x/foo
git add y/foo
git commit -a -m 'test rename'

git branch rename HEAD

echo post rename >> y/foo
git commit -a -m 'test post rename'

git branch pre-rename rename~

git filter-branch --subdirectory-filter x pre-rename
echo `git rev-parse rename` `git rev-parse pre-rename` >> .git/info/grafts

mv .git/refs/original .git/refs/original0

git filter-branch --subdirectory-filter y master ^pre-rename

rm .git/info/grafts

git log -u

如果此过程对您不起作用,那么您的存储库历史记录中可能存在您尚未描述的其他奇怪情况,例如隐藏在历史记录中的另一个重命名。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将子目录(已重命名!)分离到新的存储库中 的相关文章

  • 将 git dcommits 切换到 svn 分支

    I had master dcommit到 和rebase来自 颠覆trunk 我创建了一个中间 Subversion 分支tc 合并来自 2 个不同分支的更改 使用 git branch master git svn branch tc
  • 测量大型源树中的“接近度”

    作为我之前提出的问题的一部分找到两个来源之间的最佳匹配 https stackoverflow com questions 13898659 finding what git commit some code spawned from 其中
  • 如何使用和理解wso2 git仓库?

    我刚刚开始对wso2感兴趣 我正在寻找移动设备管理解决方案 所以我测试了 wso2 EMM 但我发现了一些限制 我想知道是否可以自己实现 我的问题是我完全迷失在 wso2 git 存储库中 有没有我错过的指导书或逻辑 如果有人帮助我解决这个
  • 为什么我使用某些 git 命令后终端变得无响应?

    我经常 真的每次 使用该命令后git log我的终端对进一步的输入没有响应 这是在 OSX 上 是否有一个我不知道的命令将使终端再次激活 而不是仅仅退出终端并重新开始 您正在使用一个无需滚动即可显示日志的程序 很可能less 可以通过按q
  • Git 将开发分支与生产版本的主分支合并

    我正在使用 Git 进行代码版本控制 我有一个开发分支 我正在其中进行所有肮脏的开发 每次我向世界发布生产版本时 我都想将其放在我的 master 分支下 问题是 每当我合并开发和 master 时 master 都会收到所有开发历史记录
  • Git 存储库错误并显示消息,它不是存储库...但它是

    我有一个 git repo 去年我一直在同一个盒子上使用 今天我跑步git status并得到错误消息 fatal Not a git repository or any parent up to mount parent home Sto
  • IntelliJ Git 集成 - git --version 空输出

    我目前正在尝试使用 IntelliJ 2016 2 的 Git 集成 但每当我将其指向可执行文件时 我都会遇到以下问题 这在技术上并不会阻止集成工作 但它确实会导致更新索引等问题 我正在运行 Windows 7 完全全新安装 但我在以前的
  • 在单独的终端屏幕上显示 git diff 和 git log 输出

    设置新的开发环境后 我遇到了一个奇怪的 git 行为 我不记得过去见过 我习惯于git diff and git log在终端中创建一个新屏幕并在其中显示其输出 什么less默认情况下 我用它作为我的寻呼机 然后我可以退出并返回到之前的终端
  • 中止 `git stash apply` [重复]

    这个问题在这里已经有答案了 我很遗憾应用了存储 错误的分支 我如何撤消此操作并将我的存储返回到我的存储列表 以便稍后将其应用到正确的分支 如果你还没有承诺 你应该能够git stash再次 可能与git reset HEAD first A
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • 在 Xcode 9 上切换分支

    我无法找到使用 Xcode 9 切换分支的菜单项 工作副本菜单似乎已经消失 有任何想法吗 Xcode 9 Xcode 8 Press 2 to open the new Source Control Navigator 右键单击master
  • Git 会删除空文件夹吗? [复制]

    这个问题在这里已经有答案了 我已提交一个项目并将其推送到我的 GitHub 帐户 该项目包含以下部分文件结构 server conf some files java lib java 和 lib 文件夹为空 从 GitHub 下载我的项目时
  • github Diff 截断错误

    在 github 中发出拉取请求并审查更改时 我们收到了 Diff Truncated 错误 如下所示 任何人都可以帮助解决这个问题 拉取请求可能会触发以下提到的限制之一GitHub 支持 https stackoverflow com a
  • git filter-repo:它可以在特定分支上使用吗?

    我正在读什么git filter repo可以做 因为我想用它做一个小实验 我有这个存储库 我只想从中获取一个目录的历史记录 比如说 master 但我不想为主人工作 我想创建一个新分支 例如filter repo test然后让git f
  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • 使用 Git 在线使用 TFS 的 Visual Studio 2013:自动保存文件签入

    我目前正在将 Visual Studio Premium 2013 Update 3 与 Team Foundation Server Online 结合使用并使用 Git 存储库 直到最近 我已经成功使用 Git Repo 几个月了 现在
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • 如何与其他用户共享 bitbucket 存储库?

    我正在使用 Bit 存储桶 并且我想与一位朋友分享我的存储库 我用的是免费的个人账户 似乎有一个选项可以在位桶中创建团队 但它说它将把我的帐户从个人帐户转换为团队帐户 我不要那个 我如何授予其他用户访问此存储库的权限 有一个共享链接选项 如
  • 警告:引用名称“xxx”不明确

    我想知道为什么我收到 refname is ambigeous 的警告 这是否意味着名称以该字符串开头的分支不超过两个 但这里没有 Thanks git checkout B03799 warning refname B03799 is a
  • 如何使用 git-tfs 清理损坏的历史记录

    我不确定我是如何进入这种状态的 但我的 tfs 默认远程分支中有一些 TFS 中不存在的提交 所以我想摆脱它们 所以我的历史是这样的 A B C D tfs default 但提交 B 和 C 实际上并不是 TFS 中的变更集 因此 当我签

随机推荐

  • 更改 python 解释器窗口

    我有两个 python 安装 2 5 和 2 6 我想将默认的 python 解释器从 2 5 更改为 2 6 有人知道怎么做吗 PYTHONPATH 是NOT你在寻找什么 这是为了改变 Python 的 导入 查找包和模块的位置 您需要更
  • pyodbc 不会引发 SQL Server 错误

    我正在尝试使用pyodbc 使用 Python 2 7 调用存储过程将记录插入 SQL Server 2012 表中 我正在路过一张临时桌子 我转储了我的 sql 当通过 SQL Server 管理控制台执行时 它生成了以下外键错误 Msg
  • 删除所有以前版本的 python

    我有一些经验C and Fortran 我想开始使用python对于我的后处理 因为我开始意识到效率有多低MATLAB是为了我需要做的事情 主要涉及数百万个点的图 我已经有几个版本了python从每次我想开始使用时就安装了 现在已经变得一团
  • HTML5:一个部分中有多个页脚/页眉

    我知道您可以在一个页面中有多个页眉 页脚 例如
  • 在 Xcode 12.5 中打开 Xcode 13.0 项目

    当我尝试打开 Xcode 项目时 我收到一条错误消息 无法打开 Users xcodeproj 处的项目 因为它 是未来的 Xcode 项目文件格式 调整项目格式 使用兼容版本的 Xcode 来允许它通过此打开 Xcode 的版本 我目前使
  • 盒子阴影仅在左右两侧

    我需要仅在元素的右侧和左侧制作盒子阴影 它应该褪色并且顶部和底部变薄 它也不应该溢出顶部和底部 主要问题是我无法阻止阴影在元素的顶部和底部溢出 这就是我所拥有的 HTML div div CSS div box shadow 0px 0px
  • React-router v4 页面刷新不起作用

    我可能错过了历史或其他什么但是当我refresh子路由上的页面 例如 login或我得到的任何其他路线 403 禁忌 代码 拒绝访问 消息 访问被拒绝 请求 ID 075CAA73BDC6F1B9 主机 ID O1n36xVCoeu aLa
  • PHP/MySQL - “最高评价”的算法

    所以我只是建立了一个星级评级系统 并尝试提出一种算法来列出 最高评级 的项目 为简单起见 以下是各列 item name average rating a decimal from 1 to 5 num votes 我正在尝试确定票数和评分
  • 在 dockerfile 中的 FROM 中使用 ARG

    问题陈述 我需要根据提供的arg从两个不同的url中提取docker projectS和project ARG url docker local artifactory com projectA By default its for A R
  • 重置 Django 缓存模板加载器的缓存

    Django 1 2 引入了一个新的模板加载器 它将数据存储在缓存中 django template loaders cached Loader 不幸的是 我未能找到有关缓存如何失效以及何时以及如何重置的任何信息 我想在我的服务器上使用它
  • TypeScript:reduce 函数 - 没有重载与此调用匹配

    尝试编写一个基本的减速器以从对象数组中返回键 的值 数组 某些键可能丢失或未定义 My code const data Key 56 Key undefined Key 44 const keys data reduce prev curr
  • $(document).ready() 和在正文末尾包含脚本有什么区别?

    在 jQuery 的 document ready 上执行 JavaScript 函数与将其包含在 HTML 正文末尾的脚本标记中之间有什么区别 Thanks DLiKS 里面的 JavaScript 代码
  • 为什么 n^O(1) 意味着“多项式时间”?

    An algorithm runs in polynomial time if it s runtime is O nk for some k However I ve also seen polynomial time defined a
  • 获取当前笔记本电脑盖子状态

    我正在编写一个 C 应用程序 专门用于笔记本电脑 我想了解盖子的状态 即何时打开以及何时关闭 我已经使用了 pInvoke 以及微软的RegisterPowerSettingNotification函数在 的帮助下这个答案 因此 通过上述内
  • PDFSharp:使用自动换行测量长文本的高度

    PDFSharp 在绘制长文本部分时支持自动文本换行 textFormatter DrawString text font XBrushes Black new XRect x y textAreaWidth 1000 XStringFor
  • 如何在列标题中使用希腊字母在 rmarkdown 中创建表格?

    我正在尝试在 rmarkdown 中创建一个表kable and kableExtra我想把希腊字母放在add header above功能 kable a format latex booktabs T longtable T gt ka
  • 更改多个 Python 实例中的变量

    是否可以同时设置类的所有实例的变量 我有一个简化的例子如下 class Object def init self self speed 0 instance0 Object instance1 Object instance2 Object
  • CSS 有类似 jQuery 的 :has() 的东西吗?

    在CSS 任何版本 中 是否有类似的东西 或者任何其他方式来做类似的事情 has jQuery 中的选择器 jQuery has selector 描述 选择元素 至少包含一个元素 匹配指定的选择器 http api jquery com
  • 如何向使用 ggplot2 创建的分区统计图添加标签?

    我正在尝试向我在 ggplot2 中创建的分区统计图添加文本注释 但目前失败 我正在寻求用名称标记每个多边形 地方政府区域 在我继续之前 我知道有人在 SO 上提出了类似的问题 并在 非常好的 教程中详细介绍了这一问题here 但是 我尝试
  • 将子目录(已重命名!)分离到新的存储库中

    我有一个存储库 我想将其目录之一分离到一个新的存储库中 This是一个完美的起点 但是有一个警告 我想要分离的目录在某个时候被重命名 如果我按照该帖子中的解决方案使用目录的新名称 那么我似乎会丢失重命名之前的历史记录 有什么想法可以调整以使