当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 释放 PowerShell GitHub 能力的秘密

作者:精品下载站 日期:2024-12-14 13:10:49 浏览:15 分类:玩电脑

释放 PowerShell GitHub 能力的秘密


您是否厌倦了通过 Web 界面重复执行相同的 GitHub 任务?或者希望通过自动化将您的工作流程提升一个档次?幸运的是,PowerShellForGitHub 模块即将解锁 PowerShell GitHub 功能!

在本教程中,您将学习如何使用 PowerShell、用于常见 GitHub 操作的 PowerShellForGitHub 模块等。

立即通过自动化有效提升您的工作流程!

先决条件

本教程将是一个实践演示。如果您想继续操作,请确保您具备以下条件:

  • 具有公共存储库的 GitHub 帐户。
  • GitHub 个人访问令牌 (PAT)。
  • 至少安装了 Windows PowerShell 5.1 或 PowerShell 7.x 的计算机 - 本教程使用 PowerShell 版本 7.2.3。

安装 PowerShellForGitHub 模块

PowerShellForGitHub 模块利用 PowerShell 的优势为 GitHub API 提供命令行交互和自动化。安装 PowerShellForGitHub 模块的最快方法是在 PowerShell 控制台中使用 PowerShell Gallery。

1. 以管理员身份打开 PowerShell,然后运行下面的 Install-Module 命令以从 PowerShell 库安装 PowerShellForGitHub 模块。

Install-Module -Name PowerShellForGitHub

输入y并回车继续安装,如下图。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

2. 现在运行以下 Get-Command 以验证模块 (-Module) 是否安装成功。此命令列出了可用于 PowerShellForGitHub 模块的所有 cmdlet。

Get-Command -Module PowerShellForGitHub

由于 Get-Module 不提供 PowerShellForGitHub 模块的输出,因此您运行 Get-Command。

如果您已成功安装 PowerShellForGitHub 模块,您将获得该模块的一长串可用 cmdlet,如下所示。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

3. 最后,运行以下 Set-GitHubAuthentication 命令连接到您的 GitHub 帐户。

Set-GitHubAuthentication

您可以输入任何内容作为用户名,这是必需的,但无论如何都会被忽略。但请务必输入您的个人访问令牌作为密码。

成功连接到 GitHub 后,您可以开始使用 PowerShell GitHub 模块的 cmdlet。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

如果您不确定 PowerShellForGitHub 模块 cmdlet 的工作原理,请运行 Get-Help 命令,然后运行相关 cmdlet,如下所示:Get-Help Set-GitHubRepository

[玩转系统] 释放 PowerShell GitHub 能力的秘密

使用PowerShell函数创建GitHub存储库

现在 PowerShellForGitHub 模块已安装完毕,本教程将开始介绍 PowerShell GitHub 可以提供的最好功能之一:创建您自己的工具!如何?通过创建 PowerShell 函数。

PowerShell 函数允许您组织脚本并促进代码的重用,从而显着提高代码的可用性和可读性。

1. 创建一个 PowerShell 脚本文件,将以下代码添加到文件中,相应更改值,然后将文件另存为 myscript.ps1

下面的代码是执行以下操作的 PowerShell 函数:

  • 创建存储库 (New-GitHubRepository)。
  • 添加(帮助)文件 (Set-GitHubContent),并创建提交 (-CommitMessage)。
  • 并可选择创建一个分支 (New-GitHubRepositoryBranch)。
Function CreateRepo {
    param ($Owner,$RepoName,$Branch,$HelpFilePath,$HelpFileContent,$FirstCommitMessage)
        # Creating a new repository
        New-GitHubRepository -RepositoryName $RepoName
        # Add a file and perform first commit            
        Set-GitHubContent -OwnerName $Owner -RepositoryName $RepoName -Path $HelpFilePath -CommitMessage $FirstCommitMessage -Content $HelpFileContent -BranchName main
        # Add a branch if the 'Branch' parameter is specified
        If ($Branches) {
            New-GitHubRepositoryBranch -OwnerName $Owner -RepositoryName $RepoName -TargetBranchName $Branch
        }
}
# Call the CreateRepo function - Be sure to replace the values below accordingly
CreateRepo -Owner BTA1981 -RepoName Repo0007 -Branch develop -HelpFilePath README.md -HelpFileContent '# README' -FirstCommitMessage 'Adding README.md'

2. 现在,运行脚本 (myscript.ps1) 并查看该函数如何工作。

.\myscript.ps1

运行脚本后,您将获得脚本创建的存储库的名称和可见性的输出。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

3. 最后,打开您最喜欢的网络浏览器,导航到 GitHub,然后查看新创建的存储库,如下所示。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

执行查询并创建自定义报告

通过运行脚本创建 GitHub 存储库非常酷。但将 PowerShell 与 GitHub 结合起来的另一个很酷的用例是执行查询和创建自定义报告。如何?通过使用 PowerShell GitHub 管道。

借助 PowerShell 管道,您只需少量代码即可创建强大的查询,并将命令与管道运算符“|”链接在一起。

GitHub 存储库中的内务管理至关重要。也许,您需要更深入地了解在特定时期内未更新的存储库。

1. 运行以下命令以获取 PowerShell 团队去年未更新的 GitHub 存储库的概述。

# - < WHAT DOES THIS COMMAND DO? >
# Get-GitHubRepository - Get all repositories from the owner PowerShell team.
# Where-Object - Where the repository isn't updated in the last year (Get-Date).
# Sort-Object - Sort results based on the last updated date/time.
# Select-Object - Show the full name and date/time when each repository was last updated

Get-GitHubRepository -OwnerName PowerShell | 
Where-Object {$_.updated_at -lt (Get-Date).AddMonths(-12)} |
Sort-Object updated_at | Select-Object full_name,updated_at

注意管道运算符的使用量。如果没有管道运算符,您需要创建多个变量来存储数据,然后才能将该数据用于另一个 cmdlet。

下面,您可以看到去年未更新的每个存储库的列表。

您的输出不仅限于 PowerShell 控制台。您还可以在文本或 CSV 文件中创建输出报告。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

2. 现在,运行以下任一命令来获取 GitHub 存储库列表。但这一次,控制台上不会显示任何输出,因为输出会导出到文本文件 (Out-File) 或 CSV 文件 (Export-CSV)。

请注意,您可以根据需要替换文件的路径和名称(C:\Outdated.txt 和 C:\Outdated.csv)。

# Export the output to the C:\Outdated.txt file
Get-GitHubRepository -OwnerName PowerShell | 
Where-Object {$_.updated_at -lt (Get-Date).AddMonths(-12)} |
Sort-Object updated_at | Select-Object full_name,updated_at |
Out-File -FilePath C:\Outdated.txt

# Export the output to the C:\Outdated.csv file
Get-GitHubRepository -OwnerName PowerShell | 
Where-Object {$_.updated_at -lt (Get-Date).AddMonths(-12)} |
Sort-Object updated_at | Select-Object full_name,updated_at |
Export-Csv -Path C:\Outdated.csv

3. 最后,运行下面的任一 Get-Content 命令来查看报告文件的内容,具体取决于您用于创建报告的文件类型。

Get-Content C:\Outdated.txt
Get-Content C:\Outdated.csv

[玩转系统] 释放 PowerShell GitHub 能力的秘密

批量执行配置更改

通常,您必须批量执行配置更改,例如更改多个存储库可见性。幸运的是,PowerShellForGithub 模块支持此类更改。

想象一下,您有很多 GitHub 存储库需要管理,并且您需要将所有以“REPO00”名称开头的存储库从公共可见性更改为私有可见性。

运行以下命令来执行以下操作:

  • 查找名称以 REPO00 开头的用户 (BTA1981) 存储库。
  • 将每个匹配的存储库的可见性更改为 -Private
Get-GitHubRepository -OwnerName BTA1981 | Where-Object { $_.name -like "REPO00*" } | 
Set-GitHubRepository -Private:$True -Verbose

如下所示,添加 -Verbose 参数会输出有关该命令所执行操作的详细信息。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

自动处理存储库问题

当您发现新问题或拉取请求时,谁没有重复且乏味的任务需要执行?为什么要奋斗?让 PowerShellForGitHub 模块扭转局面。

1. 打开您的 myscript.ps1 文件,并将代码替换为下面的代码,但请务必更改为您自己的值。

下面的代码对最近未更新的存储库中的最新问题进行了评论。

# - < WHAT DOES THIS CODE DO? >
# Get-GitHubRepository - Get all the GitHub issues 
	# labeled (Get-GitHubIssue) as a bug from the specified repository.
# Where-Object - Where there hasn't been an update for a day (Get-Date).
# New-GitHubIssueComment - Add a custom GitHub issue comment

Get-GitHubRepository -OwnerName BTA1981 -RepositoryName Repo0001 | Get-GitHubIssue -label 'bug' | 
Where-Object { $_.updated_at -lt (Get-Date).AddDays(-1)} |
New-GitHubIssueComment -Body "It's been a day since this issue is updated. Is there any update?"

2. 替换代码后,保存文件,并运行脚本。

.\myscript.ps1

脚本的输出将显示每个评论的详细信息,这些评论正在使用我们的脚本更新为新评论。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

3. 在浏览器上导航到 GitHub,然后单击您在代码中指定的存储库 (Repo0001)。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

4. 现在,单击问题选项卡(左上角),您将看到存储库问题的概述,如下所示。

单击“排序”下拉菜单,选择“最近更新”选项,然后单击一天未更新的 BUG。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

下面,您可以看到一条新评论,称该问题尚未更新。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

5. 将 myscript.ps1 文件的内容替换为以下代码,这是消除重复任务的另一个示例。

每当指定存储库出现新问题时,下面的代码就会自动将新的 GitHub 问题分配给用户。

# The GitHub username you want to assign the issue to.
$Assignee = 'bta1981'
# The account owner of the repository you want to assign an issue for.
$Owner = "BTA1981"
# The name of the repository that has the issue you want to assign.
$Repository = "Repo0001"

# - < WHAT DOES THIS COMMAND DO? >
# Get-GitHubRepository - Get the most recent GitHub issue (Get-GitHubIssue) 
	# for the specified repository ($Repository)
# Add-GitHubAssignee - Assign a user to the most recent issue

$MostRecentIssue = Get-GitHubRepository -OwnerName $Owner -RepositoryName $Repository | 
Get-GitHubIssue | Sort-Object -Descending -Property created_at | Select-Object -First 1 |
Add-GitHubAssignee -OwnerName $Owner -RepositoryName $Repository -Assignee $Assignee -Issue $MostRecentIssue.IssueNumber -Verbose

6. 替换 myscript.ps1 文件中的代码后,运行该脚本。

该脚本会立即将 GitHub 问题的分配更改为您指定的受让人 (BTA1981)。

.\myscript.ps1

由于脚本中存在 -Verbose 参数,因此会显示有关脚本分配的 GitHub 问题的详细输入。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

7. 最后,导航到您指定的 GitHub 存储库 (Repo0001) 中的最新问题,以验证脚本是否分配了该问题。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

为多个存储库创建拉取请求

管理拉取请求(特别是如果您有许多存储库)可能会很痛苦。但好消息是管理拉取请求是 PowerShellForGitHub 模块的另一个功能。

请注意,您将在代码上使用 PowerShell splatting 以获得更好的可读性,将要提供给命令的参数捆绑在一起,并将它们传递到表中。 PowerShell splatting 比编写一长行代码要好得多。

打开您的 myscript.ps1 文件并将代码替换为以下代码。请务必更改您自己的值,然后保存更改。

下面的代码在存储库(repo0001repo0002)中发送拉取请求,并将来自 feature01 分支的更改合并到 main 分支。

# Create a hashtable with some variables
$prParams = @{
    OwnerName = 'bta1981'
    RepositoryName = "$repo"
    Title = 'Add simple file to root'
    # Head branch (containing the changes to be merged)
    Head = 'feature01' 
    # Target branch of the pull request where the head changes will be merged.
    Base = 'main' 
    Body = "Adds a simple text file to the repository root.`n`nThis is an automated PR!"
}

# Create a variable with an array that contains the repositories we want to target 
$Repos = @('repo0001', 'repo0002')
# Go through all repositories and create the new pull requests
ForEach ($Repo in $Repos) {
    New-GitHubPullRequest @prParams
}

更改脚本中的值后,保存更改并运行脚本。

.\myscript.ps1

[玩转系统] 释放 PowerShell GitHub 能力的秘密

现在,导航到 GitHub 上的拉取请求。您将看到针对您在 myscript.ps1 脚本中指定的存储库的新拉取请求。

[玩转系统] 释放 PowerShell GitHub 能力的秘密

或者,运行以下命令可以更好/更清楚地了解按年龄降序排列的拉取请求。下面的代码在所有者 PowerShell 的所有存储库中查找以 Power 名称开头的五个最新 (-first 5) 拉取请求。

Get-GitHubRepository -OwnerName PowerShell | Where-Object { $_.name -like "Power*" } | 
Get-GitHubPullRequest | Sort-Object created_at -Descending | Select-Object title,created_at -first 5

[玩转系统] 释放 PowerShell GitHub 能力的秘密

结论

本教程旨在帮助您开始使用 PowerShellForGitHub 模块来自动执行常见的 PowerShell GitHub 操作。进展顺利吗?

您已了解如何安装 PowerShellForGitHub 模块并与其建立连接。此时,只要您拥有 PowerShell 和 PowerShellForGitHub 模块,您就可以放心地在本地和远程管理您的 GitHub 存储库。

现在,查看您的日常 GitHub 工作流程,并尝试合并和修改您在本教程中学到的示例片段。是时候将您的 PowerShell GitHub 生产力提升到新的水平了!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯