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

Exclude folders from Git code search / create archive branches

TL;DR版本

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

问题是如何以简单的方式重复table,并且不会过多污染我的历史。

上下文

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

此外,存储库包含帮助我们部署更改的迁移脚本。拉取请求应包含对目标文件的更改,以及使其在实时数据库上发生的迁移。因此,要在单个 PR 中向 table 添加一列,我会添加一个迁移文件,其中包含用于添加列的 alter table TAB_ORDER 语句,然后我会修改 TAB_ORDER.sql 以便创建语句其中代表 table 的新状态,包括新列。

到目前为止一切顺利。

问题

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

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

我更喜欢后者,这样我实际上可以保留我的迁移脚本,并在需要时搜索它们。当然,已删除的文件会保存在历史记录中,但现在很难再找到它们,所以最好不要删除它们。

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

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

当然也欢迎其他解决方案。

我能想到的最简单的是:

创建归档分支

git checkout -b archive

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

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

现在再次检查您的 master 分支并删除 master 分支中不需要的文件。

rm file

之后再次更新您的主存储库

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

事实证明,您实际上可以从搜索结果中排除路径。之前一直想不通,查找的时候也只是找到了不可能的证据。但是一位同事(谢谢,韦斯!)刚刚向我指出,您只需将 -path 添加到搜索查询中即可过滤出文件夹。

所以要在所有存储库中搜索 TAB_ORDER 的使用,除了 Migrations 文件夹中(祈祷其他存储库在同名文件夹中没有相关搜索结果),我可以只需搜索这个:

TAB_ORDER -path:Migrations

看起来路径必须是完整路径(相对于 repo),所以如果你有路径 a/b/c,你可以添加 -path:a,或 -path:a/b/c,但不仅仅是 -path:c.