从 Git 代码搜索/创建存档分支中排除文件夹



TL;容灾版本

当我在 GitHub 上搜索时,某个文件夹中的文件使我的搜索结果混乱。我只需要这些文件用于存档目的,所以虽然我不想删除它们,但我想我可以定期将它们移动到单独的分支以清理 master 中的此文件夹。

问题是如何以这样一种简单、可重复的方式做到这一点,并且不会过多地污染我的历史。

上下文

我(我们的)情况,我们有一个 git 存储库来保存数据模型的当前状态。所以它有一个名为TAB_ORDER.sql的文件,其中包含用于创建表的create table语句。 这些文件基本上是使用RedGate模式比较生成的。

此外,存储库包含帮助我们部署更改的迁移脚本。拉取请求应包含对对象文件的更改,以及用于在实时数据库上进行的迁移。因此,要在单个 PR 中向该表添加一列,我将添加一个带有用于添加列的alter table TAB_ORDER语句的迁移文件,并且我会修改TAB_ORDER.sql以便其中的 create 语句表示表的新状态,包括新列。

目前为止,一切都好。

问题所在

问题是,我喜欢使用 GitHub 来搜索某些数据库对象的用途,因为它速度很快,并且允许我搜索所有存储库。但是我的搜索被所有迁移脚本污染了。理想情况下,我想从搜索中排除这些,但 GitHub 不支持这一点,而且看起来不会很快。

所以我基本上有两个选择,除了坚持下去:

  • 完全删除迁移脚本。
  • 将迁移保存在单独的分支中,但不保留在主分支中。

我更喜欢后者,所以我实际上可以保留我的迁移脚本,并根据需要搜索它们。当然,已删除的文件会保留在历史记录中,但要找到它们不再容易,因此保留它们未删除是首选。

我的解决方案(我需要帮助)

如何轻松地将这些迁移脚本移动到单独的存档分支。鉴于我希望开发人员通过迁移和修改创建单个 PR,该存档将是一个单独的过程,我可以定期执行,但我真的不知道将文件从主文件"移动"到分支的好方法,基本上。

当然,替代解决方案也是受欢迎的。

事实证明,您实际上可以从搜索结果中排除路径。我以前想不通,在搜索时,我只发现了这是不可能的证据。但是一位同事(谢谢,Wes!)刚刚向我指出,您可以简单地将-path添加到搜索查询中以过滤掉文件夹。

因此,要在除 Migrations 文件夹之外的所有存储库中搜索 TAB_ORDER 的使用(手指交叉,其他存储库在同名文件夹中没有相关搜索结果),我可以简单地搜索以下内容:

TAB_ORDER -path:Migrations

看起来路径必须是完整路径(相对于存储库),因此如果您有路径a/b/c,则可以添加-path:a-path:a/b/c,但不仅仅是-path:c

我能想到的最简单的是:

创建存档分支

git checkout -b archive

然后通过以下方式将这些文件复制到新的存档分支:

git show <branch_name>:path/to/file >path/to/local/file

现在再次签出您的主分支并删除主分支中不需要的文件。

rm file

之后再次更新主资料库

git add *    
git commit -m "removed file"    
git push origin master

最新更新