여러 리포지토리를 관리하는 CLI 도구인 mani

13784 단어 clivcsgogit

TL;DR - Mani is a many-repo tool that helps you manage multiple repositories. It's useful when you are working with microservices, multi-project systems, or just a bunch of personal repositories and want a central place for pulling all repositories and running commands over them.

In mani, you specify repositories and commands in a config file and then run the commands over all or a subset of the projects.



걱정하지 마십시오. 이 게시물은 모노 또는 다중 리포지토리 설정을 사용해야 하는지 여부에 대한 오래된 논쟁에 관한 것이 아닙니다. 나는 둘 다에 대한 장소가 있다고 생각하며 두 가지 접근 방식에는 장단점이 있습니다.

어쨌든 현재 작업장에서 단일 리포지토리를 사용하고 있더라도 프로젝트(업무, 개인 프로젝트 등)에 대해 많은 리포지토리 설정을 사용하고 있을 수 있으므로 여전히 Mani가 유용할 수 있습니다(또는 일부 alternatives ).

Mani은 직장과 프로젝트 모두에서 여러 리포지토리를 관리하기 위해 CLI 도구가 필요했기 때문에 발생했습니다. 전제는 많은 리포지토리가 있고 다음을 원한다는 것입니다.
  • 이름, URL 및 저장소
  • 에 대한 간략한 설명이 포함된 저장소의 중앙 위치
  • 하나의 명령으로 모든 저장소를 복제하는 기능
  • 1, 하위 집합 또는 모든 저장소에서 임시 명령 및 사용자 정의 명령(아마도 git status 작업 트리 상태 확인)을 실행할 수 있는 기능
  • 1, 하위 집합 또는 모든 저장소 및 명령에 대한 개요를 가져오는 기능

  • Mani는 또한 내가 직장에서 본 반복 패턴 중 하나를 표준화합니다. 첫날에 Github의 조직에 대한 액세스 권한이 부여되며 운이 좋으면 일부를 가져오는 오래된 bash 스크립트가 있을 수 있습니다. 작업해야 하는 저장소. 다른 경우에는 수동으로 방문하여 복제해야 하는 모든 프로젝트에 대한 링크가 포함된 README 문서만 제공됩니다.

    용법



    Mani를 설치해 보겠습니다. 바이너리는 Github release page에서 사용 가능하거나 cURL을 통해 설치할 수 있습니다(Linux 및 MacOS만 해당).

    curl -sfL https://raw.githubusercontent.com/alajmo/mani/main/install.sh | sh
    


    manicli.com 에도 추가 설치 방법이 있습니다.

    이제 여러 개의 git 저장소가 있다고 가정해 보겠습니다.

    
    $ tree -L 2
    
    .
    ├── frontend
    │   ├── dashgrid
    │   └── pinto
    └── template-generator
    


    이 디렉토리에서 Mani를 초기화하는 것으로 시작하겠습니다.

    
    $ mani init
    
    Initialized mani repository in /home/samir/tmp/init
    - Created mani.yaml
    - Created .gitignore
    
    Following projects were added to mani.yaml
    
     Project            | Path
    --------------------+--------------------
     init               | .
     dashgrid           | frontend/dashgrid
     pinto              | frontend/pinto
     template-generator | template-generator
    
    


    생성된 두 파일의 내용을 살펴보겠습니다.

    
    $ cat mani.yaml
    
    projects:
      init:
        path: .
    
      dashgrid:
        path: frontend/dashgrid
        url: https://github.com/alajmo/dashgrid.git
    
      pinto:
        path: frontend/pinto
        url: https://github.com/alajmo/pinto.git
    
      template-generator:
        url: https://github.com/alajmo/template-generator.git
    
    tasks:
      hello:
      desc: Print Hello World
      cmd: echo "Hello World"
    
    $ cat .gitignore
    
    # mani #
    template-generator
    frontend/pinto
    frontend/dashgrid
    # mani #
    

    mani init 명령은 리포지토리가 포함된 mani.yaml 파일과 hello-world라는 예제 작업 및 모든 프로젝트가 포함된 .gitignore 파일을 생성했습니다. 이는 이 디렉토리를 git 저장소로 초기화할 때(다른 사용자가 이 저장소를 복제한 다음 실행mani sync하여 모든 저장소를 복제할 수 있으므로 권장됨) 디렉토리가 Mani 저장소에 추가되는 것을 방지하기 때문입니다. .

    Mani에는 리포지토리를 보고 관리하는 데 도움이 되는 다양한 하위 명령이 있습니다.

    
    # Open mani.yaml in your preferred editor
    $ mani edit
    
    # List projects
    $ mani list projects
    
    Project
    -------------------
    init
    dashgrid
    pinto
    template-generator
    
    # List repositories in a tree-like format
    $ mani list projects --tree
    
    ┌─ frontend
    │  ├─ dashgrid
    │  └─ pinto
    └─ template-generator
    
    # Describe all tasks
    $ mani describe tasks
    
    Name: hello
    Description: Print Hello World
    Theme: default
    Target:
        All: false
        Cwd: false
        Projects:
        Paths:
        Tags:
    Spec:
        Output: text
        Parallel: false
        IgnoreError: false
        OmitEmpty: false
    Cmd:
        echo "Hello World"
    
    


    이제 프로젝트에 몇 가지 태그와 설명을 추가하고 몇 가지 새로운 작업을 수행해 보겠습니다.

    projects:
      example:
        path: .
        desc: A mani example
    
      pinto:
        path: frontend/pinto
        url: https://github.com/alajmo/pinto.git
        desc: A vim theme editor
        tags: [frontend, node]
    
      template-generator:
        url: https://github.com/alajmo/template-generator.git
        desc: A simple bash script used to manage boilerplates
        tags: [cli, bash]
        env:
          branch: master
    
    themes:
      custom:
        table:
          options:
            draw_border: true
            separate_columns: true
            separate_header: true
            separate_rows: true
    
    tasks:
      git-status:
        desc: show working tree status
        cmd: git status
    
      git-last-commit-msg:
        desc: show last commit
        cmd: git log -1 --pretty=%B
    
      git-last-commit-date:
        desc: show last commit date
        cmd: |
          git log -1 --format="%cd (%cr)" -n 1 --date=format:"%d  %b %y" \
          | sed 's/ //'
    
      git-branch:
        desc: show current git branch
        cmd: git rev-parse --abbrev-ref HEAD
    
      npm-install:
        desc: run npm install in node repos
        target:
          tags: [node]
        cmd: npm install
    
      git-overview:
        desc: show branch, local and remote diffs, last commit and date
        theme: custom
        commands:
          - task: git-branch
          - task: git-last-commit-msg
          - task: git-last-commit-date
    
    


    태그git-status가 있는 작업 및 대상 프로젝트 실행bash:

    
    $ mani run git-status --tags bash
    
    TASK [git-status: show working tree status] **************************
    
    template-generator | On branch master
    template-generator | Your branch is up to date with 'origin/master'.
    template-generator |
    template-generator | nothing to commit, working tree clean
    Name:         git-status
    Description:  Show git status
    Shell:        sh -c
    Env:
    Command:      git status
    
    

    git-status 디렉터리 아래의 리포지토리에 대해 작업frontend을 실행합니다.

    
    TASK [git-status: show working tree status] *************
    
    pinto | On branch main
    pinto | Your branch is up to date with 'origin/main'.
    pinto |
    pinto | nothing to commit, working tree clean
    
    


    여러 명령이 있는 다른 작업을 실행하고 테이블에 출력을 표시합니다.

    
    $ mani run git-overview  -t bash -d frontend/ -o table
    
    +--------------------+------------+-------------------------------------------+-----------------------------------+
    | Project            | Git-Branch | Git-Last-Commit-Msg                       | Git-Last-Commit-Date              |
    +--------------------+------------+-------------------------------------------+-----------------------------------+
    | pinto              | main       | Update readme                             | 22 Mar 22 (6 weeks ago)           |
    |                    |            |                                           |                                   |
    +--------------------+------------+-------------------------------------------+-----------------------------------+
    | template-generator | master     | Edit command should work without argument | 24 Jan 20 (2 years, 3 months ago) |
    |                    |            |                                           |                                   |
    +--------------------+------------+-------------------------------------------+-----------------------------------+
    
    


    이제 예를 들어 모든 프로젝트의 파일 수를 세는 임시 명령을 실행하려면 mani exec 하위 명령을 사용할 수 있습니다.

    
    $ mani exec --all --output table --parallel 'find . -type f | wc -l'
    
     Project            | Output
    --------------------+--------
     example            | 486
     pinto              | 361
     template-generator | 42
    
    


    결론



    이 Mani 소개가 도움이 되셨기를 바라며, 더 자세히 알아보려면 github.com/alajmovic/mani으로 이동하십시오.

    대안



    Mani는 최초가 아닙니다. 다음 대안을 확인하십시오!
  • gita
  • gr
  • meta
  • mu-repo
  • myrepos
  • repo
  • vcstool
  • 좋은 웹페이지 즐겨찾기