powershell을 사용하여 github와 화해하기

컴퓨터에서 새 프로젝트를 시작할 때 반복적인 작업 세트를 수행하는 이러한 고통에 공감할 수 있을 것이라고 확신합니다. 다음은 사용 중인 언어, 프레임워크 또는 IDE에 관계없이 개발자가 수행하는 일반적인 작업입니다.

1단계: 프로젝트 디렉토리 생성 또는 CLI 생성기를 사용하여 프로젝트 구조 생성
2단계: 브라우저에서 github.com을 열고 UI를 사용하여 리포지토리 생성
3단계: CLI가 아직 생성되지 않은 경우 로컬 리포지토리 생성
4단계: 원격(Github) 저장소 추가, 초기 커밋 및 푸시 수행

음, 언젠가 git cli를 사용하여 2단계를 수행할 수 있기를 바랍니다. 그러나 현재로서는 브라우저로 이동하여 UI를 사용하여 동일한 것을 수동으로 생성하지 않고 리포지토리를 생성할 수 있는 방법이 없습니다. 그래서 여기 제 솔루션이 있습니다. 훌륭하게 작동하고 반복해서 반복하지 않아도 됩니다. 저는 Windows 컴퓨터를 사용하고 이런 종류의 자동화 스크립트를 위해 powershell을 좋아합니다. powershell 함수를 생성했는데 호출되면 Github Rest API를 사용하여 새 리포지토리를 생성하고 빈 프로젝트 README.MD 파일에 대한 초기 커밋도 수행합니다. 참조를 찾고 있는 경우를 대비하여 아래 단계를 문서화했습니다. 스크립트를 있는 그대로 사용할 수 있으며 필요에 따라 자유롭게 수정할 수 있습니다.

다음은 powershell 솔루션입니다.



여기에서 시작: github 액세스 토큰 생성 - https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
아래와 같이 접두사를 사용하여 config라는 파일에 액세스 토큰을 배치합니다.


가능하면 구성 파일이 저장된 동일한 경로에서 powershell 스크립트New-Repo.ps1를 생성합니다. 이 이름은 원하는 대로 다른 이름이 될 수 있습니다. 다음은 RepoName, UserName 및 ConfigFile의 세 가지 매개 변수가 있는 스크립트의 기본 구조입니다.

function New-Repo {

     [CmdletBinding()]
     Param(
         [Parameter(Mandatory = $true)]
         $RepoName,
         [Parameter(Mandatory = $true)]
         $UserName,
         $ConfigFile = "C:\Users\abhik\Documents\dev-env\powershell\GitAutomation\config" ## Default config file location
    )
 }


다음 코드를 추가하여 구성 파일에서 액세스 토큰을 검색합니다.


##### Read Github Access Token #####
 $fileContent = Get-Content -Path $ConfigFile

 $accessToken = ''
 foreach ($line in $fileContent) {
     if ($line.Contains('PERSONAL_ACCESS_TOKEN')) {
        $accessToken = $line -replace ".*="
     }
 }



github repo rest endpointhttps://api.github.com/user/repos에 대한 POST 호출을 수행합니다.

##### Prepare Github API Post call #####
 $user = $UserName
 $pass = $accessToken
 $pair = "$($user):$($pass)"

 $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
 $basicAuthValue = "Basic $encodedCreds"
 $Headers = @{
    Authorization = $basicAuthValue
 }
 $body = @{
     name    = $RepoName
     accept  = 'application/vnd.github.v3+json'
     private = $false
 }

 $bodyJson = ConvertTo-Json $body
 Write-Output "Posting Data: "$bodyJson
 $response = Invoke-WebRequest -Method 'POST' -Uri 'https://api.github.com/user/repos' -Headers $Headers -Body $bodyJson

 $responseJson = $response | ConvertFrom-Json
 Write-Output "Repo : $($responseJson.html_url) Created!"


마지막이자 마지막 단계는 로컬 git repo를 초기화하고 초기 커밋을 수행하는 것입니다.

##### Create local repo and sync remote #####
 Write-Output "Creating local repo..."
 git init
 New-Item -Path .\README.MD 
 git add README.MD
 git commit -m 'initial commit -setup with powershell script'

 Write-Output "Syncing remote..."
 git remote add origin "$($responseJson.html_url).git"
 git push --set-upstream origin master


이제 powershell 셸에서 이 기능에 액세스할 수 있도록 powershell 프로필에 함수를 추가했습니다. 프로필에 기능을 추가하는 방법은 다음과 같습니다.
notepad.exe $PROFILE를 사용하여 프로필을 엽니다. 프로필을 처음 사용하는 경우 프로필 파일을 생성(수락)하라는 메시지가 표시됩니다. 프로필이 생성되면 다음 줄을 추가합니다 . C:\dev-env\powershell\GitAutomation\New-Repo.ps1 . 줄 시작 부분의 점(.)이 중요합니다. powershell에 함수를 메모리에 유지하도록 지시합니다.

그렇게 해야 합니다. powershell 터미널을 다시 시작하면 프로젝트 루트 폴더 내에서 New-Repo 함수를 호출할 수 있어야 합니다. github 사용자 이름과 함께 리포지토리 이름을 전달합니다. 그런 다음 powershell이 ​​작업을 수행하고 몇 초의 수동 작업을 절약할 수 있습니다. 개발자로서 우리는 게을러서 몇 초라도 시간을 아껴야 한다고 생각합니다 🙂.



결론



위의 코드 블록은 이 자동화를 수행하는 powershell 방식을 간략하게 설명합니다. 그러나 아이디어는 쉘 스크립트로 쉽게 확장될 수 있습니다. 저는 이 스크립트를 정기적으로 사용합니다. 시간이 지남에 따라 프로그래머가 그다지 좋아하지 않는 컨텍스트 전환에서 저를 구했습니다.

전체 코드는 여기에서 확인할 수 있습니다: https://github.com/abhgho/git-powershell-automation/blob/main/New-Repo.ps1


Roman SynkevychUnsplash의 사진

좋은 웹페이지 즐겨찾기