是否可以在 GitLab 中的文件内搜索代码或文本?我可以搜索文件、问题、里程碑等,但找不到在源文件中搜索代码或在文档中搜索文本(即 .doc 文件)的方法。
我们有一个付费的 gitlab 帐户,因此我们的域名是 gitlab.ourcompany.com - 所以这个答案可能并不适用于所有人。有几次我需要在 Gitlab 项目中的所有文件中搜索“字符串”,但没有明确的“搜索”按钮。搜索栏仅搜索匹配的项目名称 - 所以不是我要找的。下面这个方法是最容易使用也最容易记住的。
要在 GitLab 上搜索文件,请点击 URL https://gitlab.com/search?utf8=%E2%9C%93&search_code=true&repository_ref={BranchName}
从下拉列表中选择相应的组和项目。
输入要搜索的文字,然后点击“搜索”按钮。
或者,您可以使用 python-gitlab 库来搜索您需要的项目中的文本:
import gitlab
def search(gitlab_server, token, file_filter, text, group=None, project_filter=None):
return_value = []
gl = gitlab.Gitlab(gitlab_server, private_token=token)
if (project_filter == '') and (group == ''):
projects = gl.projects.list(all=True)
else:
group_object = gl.groups.get(group)
group_projects = group_object.projects.list(search=project_filter)
projects = []
for group_project in group_projects:
projects.append(gl.projects.get(group_project.id))
for project in projects:
files = []
try:
files = project.repository_tree(recursive=True, all=True)
except Exception as e:
print(str(e), "Error getting tree in project:", project.name)
for file in files:
if file_filter == file['name']:
file_content = project.files.raw(file_path=file['path'], ref='master')
if text in str(file_content):
return_value.append({
"project": project.name,
"file": file['path']
})
return return_value
完整的示例可以在这里找到:gitlab-search
GitLab 16.2(2023 年 7 月)方便搜索,包括当前项目内的代码搜索:
命令面板
如果您是高级用户,使用键盘进行导航和执行操作可能会令人沮丧。现在,新的命令面板可帮助您使用键盘完成更多工作。
要启用命令面板,请打开左侧边栏并单击 Search GitLab (🔍) 或使用 / 键。
输入特殊字符之一:
- > - 创建新对象或查找菜单项
- @ - 搜索用户
- : - 搜索项目
- / - 在默认存储库分支中搜索项目文件