从Git代码搜索/创建归档分支中排除文件夹
TL;DR版本 当我在GitHub上搜索时,某个文件夹中的文件将我的搜索结果弄乱。我只需要出于归档目的而使用这些文件,所以尽管我不想删除它们,但我认为可以定期将它们移动到单独的分支以清理master中的此文件夹 问题是如何做到这一点,使其简单、可重复,并且不会太多地污染我的历史 上下文 在我(我们)的情况下,我们有一个保存数据模型当前状态的git存储库。因此它有一个名为从Git代码搜索/创建归档分支中排除文件夹,git,github,branch,archive,Git,Github,Branch,Archive,TL;DR版本 当我在GitHub上搜索时,某个文件夹中的文件将我的搜索结果弄乱。我只需要出于归档目的而使用这些文件,所以尽管我不想删除它们,但我认为可以定期将它们移动到单独的分支以清理master中的此文件夹 问题是如何做到这一点,使其简单、可重复,并且不会太多地污染我的历史 上下文 在我(我们)的情况下,我们有一个保存数据模型当前状态的git存储库。因此它有一个名为TAB_ORDER.sql的文件,其中包含用于创建表的createtable语句。 这些文件基本上是使用RedGate模式比较生
TAB_ORDER.sql
的文件,其中包含用于创建表的createtable
语句。
这些文件基本上是使用RedGate模式比较生成的
此外,存储库包含帮助我们部署更改的迁移脚本。pull请求将包含对对象文件的更改,以及使其发生在实时数据库上的迁移。因此,要向该表中添加一列,在单个PR中,我将添加一个迁移文件,其中包含一个用于添加列的alter table TAB\u ORDER
语句,并修改TAB\u ORDER.sql,以便其中的create语句表示表的新状态,包括新列
到目前为止还不错
问题
问题是,我喜欢使用GitHub搜索某些数据库对象的使用情况,因为它很快,而且它允许我搜索所有的repo。但是我的搜索被所有迁移脚本所污染。理想情况下,我希望从搜索中排除这些内容,但GitHub不支持这一点,而且看起来也不会很快实现
因此,除了坚持下去,我基本上有两个选择:
- 完全删除迁移脚本李>
- 将迁移保留在单独的分支中,但不保留在主分支中
当然,也欢迎其他解决方案。我能想到的最简单的方法是: 创建归档分支
git checkout -b archive
之后,通过以下方式将这些文件复制到新的存档分支机构:
git show <branch_name>:path/to/file >path/to/local/file
然后再次更新主存储库
git add *
git commit -m "removed file"
git push origin master
实际上,您可以从搜索结果中排除路径。我以前想不出来,搜索的时候我只找到了不可能的证据。但是一位同事(谢谢,韦斯!)刚刚向我指出,您只需将
-path
添加到搜索查询中,即可过滤出一个文件夹
因此,要在所有存储库中搜索TAB_ORDER的使用情况,除了在Migrations文件夹中(但愿其他Repo在同名文件夹中没有相关搜索结果),我只需搜索以下内容:
TAB_ORDER -path:Migrations
看起来路径必须是完整路径(相对于回购),因此如果您有路径
a/b/c
,则可以添加-path:a
,或-path:a/b/c
,但不仅仅是-path:c您使用的是Oracle还是SQL Server?我为Redgate工作,我们很感兴趣的是,您正在搜索scripts文件夹中的对象引用。我们想知道,与文件搜索相比,我们是否应该在工具中更好地解决这个问题?是的,有不同的搜索方法。文件是一个选项,如果我只在那个repo中搜索的话。我甚至可以搜索数据库本身。但是GitHub非常快(它是一个相当大的Oracle数据库),我也用它来搜索其他代码库的其他repo。特别是如果我想找到其他哪些项目使用某个数据库对象,GitHub非常方便,因为我们有几十个存储库,我甚至没有将它们全部签出。GitHub可以一次搜索所有这些文件。如果我想检查变更的影响,这是一个非常有用的工具。感谢您发布解决方案。我也不知道-路径,所以我也学到了一些东西!为了其他用户的利益,我们甚至应该将这个“把戏”记录在某个地方:)
TAB_ORDER -path:Migrations