Git Multiple Repo
If your codebase is too large to maintain in a single Git repository, you should use multiple repositories.
Pre-requisites
- Public SSH keys (
id_ecdsa.pub
/id_rsa.pub
/id_ed25519.pub
, etc.) are present in your GitHub and GitLab profiles - Private SSH keys (
id_ecdsa
/id_rsa
/id_ed25519
, etc.) are added and persisted in your OS's keychain - SSH config file has keys specified for GitHub and GitLab:
.ssh/config
Host github.com
Hostname github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ecdsa
Host gitlab.com
Hostname gitlab.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
Or
.ssh/config
Host github.com-user
HostName github.com
User git
IdentityFile /home/user/.ssh/id_ed25519
Host gitlab.com
PreferredAuthentications publickey
IdentityFile /home/user/.ssh/id_ed25519_2
- Initialize git in a directory:
git init
- Connect git to one remote repository (located in GitHub)
git remote add origin [email protected]:your-username/your-repo.git
- Rename
.git
to something like.github
mv .git .github
- Initialize git again
git init
- Connect git to the other remote repository (located in GitLab)
git remote add origin [email protected]:your-username/your-repo.git
- Rename
.git
to something like.gitlab
mv .git .gitlab
- Verify that current directory is connected to two different remote repositories
git --git-dir=.github remote -v
- Pull remote (GitHub and GitLab) repositories
git --git-dir=.github pull origin main
- Add a file to both repositories
git --git-dir=.github add README.md
- Write commit message
git --git-dir=.github commit -m "operational overview"
- Push to remote
git --git-dir=.gitlab push -u origin main
The only additional thing we're doing here is using the --git-dir
flag.
If you plan on doing this frequently you could add an alias in your shell config file (like .zprofile
, bashrc
,
etc.):
export github="git --git-dir=.github"
Future operations like pull
, push
, add
, commit
can be performed like - github pull origin main
, gitlab pull origin main
, etc.