Synchronize multiple git repos recursively
npm install @deliverymanager/gitsync```
~$ sudo npm install -g @deliverymanager/gitsync
#### For pull:
``
~$ gitsync --pull
--------------------------------------------------------------------------------
#### For clone:
``
~$ gitsync --clone
--------------------------------------------------------------------------------
#### For both:
``
~$ gitsync --all
##### Or:
``
~$ gitsync -a
--------------------------------------------------------------------------------
#### To (re)initialize credentials:
``
~$ gitsync --init
--------------------------------------------------------------------------------
#### To checkout to stable branches (production/prod):
``
~$ gitsync --checkout
--------------------------------------------------------------------------------
##### The description is used to determine the exact path to which the repository will be cloned.
##### If the description is not a valid path, a warning appears.
Repository description: path/to/folder -> Will clone the repository in ./path/to/folder/
Repository description: Some description -> Will show a warning and __not__ clone
#### The following file, .gitsync.json, must be placed in the home folder and is required for authentication with the GitHub API:
#### For only public repositories:
``
{
"user":
"user_agent":
"sync_account":
"org":
}
#### For private repositories as well:
``
{
"user":
"user_agent":
"sync_account":
"org":
"at":
}
#### To run the tests as well, the file must look like this:
``
{
"user":
"at":
"test_repo_1": {
"name":
"full_name":
"local_path":
},
"test_repo_2": {
"name":
"full_name":
"local_path":
},
"user_agent":
"sync_account":
"org":
}
#### You can place the file yourself or you could run ~$ gitsync --init which will prompt for user name and Github API access token.
``
~$ gitsync --init
#### If you try to use the script without the .gitsync.json` file present in the home folder, you will be prompted to initialize it, and execution will continue after the file is created.
#### _Note_: You could omit the access token. The script will still work but _only_ for public repositories.
Promise - Resolves to the the output of fs.writeFile or to message: 'Credentials not updated' | Param | Type | Default | Description |
| --- | --- | --- | --- |
| [cred] | object | {} | Credentials to keep Reads file with credentials, prompts for creation if not found and for update if found. Creates/Updates credentials. |
repos - Mapped to have attributes name, full_name, local_path | Param | Type | Description |
| --- | --- | --- |
| name | string | Github username |
| org | boolean | Whether the account belongs to an organization |
| user | string | User-Agent Header |
| at | string | Github authentication token |
boolean - Whether path is valid | Param | Type | Description |
| --- | --- | --- |
| path | string | Path under which to clone a repo |
Promise - Resolves to the path under which the repo was cloned | Param | Type | Description |
| --- | --- | --- |
| repo | object | Repository info |
| repo.name | string | |
| repo.full_name | string | |
| repo.local_path | string | local path to which the repo will be cloned |
| at | string | Github authentication token |
---
Array.<string> - The repository folder paths under cwd string - Repo status: diverged, fast-forward, up-to-date | Param | Type | Description |
| --- | --- | --- |
| path | string | The absolute path to use as an cwd with exec |
string - Success message | Param | Type | Description |
| --- | --- | --- |
| path | string | The absolute path to use as an cwd with exec |
Array.<string> - The branch names | Param | Type | Description |
| --- | --- | --- |
| path | string | The absolute path to use as an cwd with exec |
Array.<string> - The branches that were added | Param | Type | Description |
| --- | --- | --- |
| path | string | The absolute path to use as an cwd with exec |
| branches | Array.<string> | All repo branches |