여러 리포지토리를 관리하는 CLI 도구인 mani
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 도구가 필요했기 때문에 발생했습니다. 전제는 많은 리포지토리가 있고 다음을 원한다는 것입니다.
git status
작업 트리 상태 확인)을 실행할 수 있는 기능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는 최초가 아닙니다. 다음 대안을 확인하십시오!
Reference
이 문제에 관하여(여러 리포지토리를 관리하는 CLI 도구인 mani), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alajmo/mani-a-cli-tool-to-manage-multiple-repositories-1eg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)