https://github.com/hellothisisflo/hierarchy
Clone and Maintain an entire hierarchy in one command
https://github.com/hellothisisflo/hierarchy
Last synced: 10 months ago
JSON representation
Clone and Maintain an entire hierarchy in one command
- Host: GitHub
- URL: https://github.com/hellothisisflo/hierarchy
- Owner: HelloThisIsFlo
- Created: 2019-07-08T15:52:24.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-04-20T18:24:14.000Z (almost 5 years ago)
- Last Synced: 2025-03-04T12:27:58.817Z (12 months ago)
- Language: Python
- Homepage: https://floriankempenich.github.io/Hierarchy/
- Size: 41 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Hierarchy
[](https://travis-ci.org/FlorianKempenich/hierarchy) [](https://pypi.org/project/hierarchy/)
Hierarchy is a simple tool that allows you to clone and maintain an entire hierarchy of Git repository in _one single command_:
```
$ hierarchy
```
> TODO: Add picture of `hierarchy` in action
## Quick-Start
1. **Install**
```bash
$ pip install hierarchy
```
2. **Create the _Hierarchy_ file**
```bash
$ nano ~/.hierarchy
```
> _Sample Hierarchy File_
> ```yaml
> repos:
> - path: ~/Dev/CliTools
> url: git@github.com:FlorianKempenich/Hierarchy.git
>
> - path: ~/Dev/CliTools
> url: git@github.com:FlorianKempenich/kata.git
>
> - path: ~/Dev/CliTools/DevOps
> url: git@github.com:FlorianKempenich/ansible-droplet.git
>
> - path: ~/Dev/HomeAutomation
> url: git@github.com:FlorianKempenich/Appdaemon-Test-Framework.git
> name: appdaemontestframework
> ```
3. **Run _Hierarchy_**
```bash
$ hierarchy
```
* _Hierarchy_ will clone all the repositories at the specified location
* If a repo already exists at the specified location, _Hierarchy_ will pull
the latest changes (WIP)
* If a repo contains local modifications or has some un-pushed commits,
the repo will be skipped and a warning will be emitted (WIP)
## _Hierarchy_ file structure
The _Hierarchy_ file represents the flattened hierarchy of all the git repository to clone and maintain.
It consists of a list of entries, under the key `repos`, each representing a repository to clone.
```yaml
repos:
- REPO_TO_CLONE_1
- REPO_TO_CLONE_2
- REPO_TO_CLONE_3
```
Each repository has the following structure:
```yaml
url: "URL of the project. The same used to clone the repository with `git clone`"
path: "The local path where to clone the repository. It can contain `~` to represent HOME"
name: "OPTIONAL - A name to override the default repository name when cloning"
```
**The repository will be cloned at:** `path/name`
If no `name` is provided, the repository name will be used.
A sample _Hierarchy_ file might look like this:
```yaml
repos:
- path: ~/Dev/CliTools
url: git@github.com:FlorianKempenich/Hierarchy.git
- path: ~/Dev/CliTools
url: git@github.com:FlorianKempenich/kata.git
- path: ~/Dev/CliTools/DevOps
url: git@github.com:FlorianKempenich/ansible-droplet.git
- path: ~/Dev/HomeAutomation
url: git@github.com:FlorianKempenich/Appdaemon-Test-Framework.git
name: appdaemontestframework
```
## Options
* ### `-f` / `--file HIERARCHY_FILE`
A hierarchy file to use.
_Default:_ `~/.hierarchy`
* ### `-v` / `--verbose`
Enable verbose mode
* ### `--help`
Show help
---
## Work In Progress
- [x] Allow for `~` in the `path`
- [x] Create directories if do not exist
- [ ] Clone with all submodules
- [ ] If directory exists and not empty:
- [ ] Is not same repo => Skip and notify user (ERROR)
- [ ] Is not repo => Skip and notify user (ERROR)
- [ ] Is correct repo:
- [ ] Has no local modifications and up to date with remote =>
- [ ] Update (pull)
- [ ] Update with all submodules
- [ ] Has local modifications => Skip and notify user (WARN)
- [ ] Is not up to date with remote => Skip and notify user (WARN)