==== Git Remote Server ====
Setting up a git server is as easy as this...
# On the server
cd /usr/local/share
sudo mkdir mygitrepo
sudo useradd -d /usr/local/share/mygitrepo -c "Git repo user" gituser
sudo chown gituser mygitrepo
cd mygitrepo
sudo -u gituser mkdir myrepo1
sudo -u gituser git init --bare myrepo1
sudo passwd gituser
# On the client
mkdir project1
cd project1
touch dummyfile
git init
git add dummyfile
git commit -m "Initial commit"
git remote add origin ssh://gituser@myserver/usr/local/share/mygitrepo/myrepo1
git push origin main
==== Merge between branches ====
# Get the current branch name
git branch # The one with the asterisk is current
git branch --show-current
git rev-parse --abbrev-ref HEAD # For old versions which dont have "git branch"
# Merge from main to someBranch
git checkout someBranch
git merge main
# Merge from someBranch to main
git checkout main
git merge someBranch
# Set upstream branch for local branch
git push --set-upstream origin someBranch
==== Sub Module ====
A sub module creates a link to another Git repository.
# Allow the use of file paths
git config --global protocol.file.allow always
# Add the other repo as a submodule
git submodule add /Users/nitin/Documents/practice/try_git_child_1 child_1
# Subsequently, fetch the changes from the submodule
git submodule update --remote
# When someone wants to clone the parent repo
git -c protocol.file.allow=always clone --recurse-submodules /Volumes/path/to/repository
==== Sub Tree ====
A subtree is essentially a copy. The parent repository does not have any reference to the path of the child repository (therefore all the "git subtree" commands require the path to the child repository).
# Add/Push/Pull
git subtree add/pull/push --prefix child_1 /Users/nitin/Documents/practice/try_git_child_1 main
==== Git Checkout Subdirectory ====
git clone --no-checkout --depth=1 --filter=tree:0 https://github.com/pockettheories/somerepo.git
cd test-git-partial-clone-big-small-no-bigtree
git sparse-checkout set --no-cone /subdir1 /subdir2 /subdir3
git checkout