diff --git a/Git/README.md b/Git/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d1b53dc5e125f6ca67c14ea35beb54ee6050af2f
--- /dev/null
+++ b/Git/README.md
@@ -0,0 +1,40 @@
+# Git Tipps and Tools
+There is a lot of ways how to use git and sometimes a working solution can be very helpful for everybody. So please share you experience and working solutions.
+
+[[_TOC_]]
+
+
+## HowTo Sync a GitHub and a GitLab repository
+It is easy to import a GitHub repo into GitLab and the otherway around. However, if you want to make sure you can have both repos at the same state, you need to syncronize them.
+
+How to call: `./git-repos-sync [URL1] [URL2] [Branch]`
+This means:
+- `URL1` - Address of the first remote repository
+- `URL2` - Address of the second remote repository
+- The order of `URL1` or `URL2` does not matter.
+- `Branch` is usually `master`
+
+Different use cases:
+1. You have **already** a local copy of either of the repositories (e.g. GitLab or GitHub)
+2. You have no local copy of either repository.
+
+### Case 1
+
+```bash
+cd dir-of-repo
+# copy the script there
+wget 
+# execute the script
+./git-repos-sync [URL] [URL] [Branch]
+```
+
+### Case 2
+
+```bash
+# Create a new folder to do the sync, can be any name
+mkdir sync-repos
+# copy the script there
+wget 
+# execute the script
+./git-repos-sync [URL] [URL] [Branch]
+```
\ No newline at end of file
diff --git a/Git/git-repos-sync b/Git/git-repos-sync
new file mode 100644
index 0000000000000000000000000000000000000000..10fb8e944bdd5aac60fd22d5af7d04f44b2ce0fb
--- /dev/null
+++ b/Git/git-repos-sync
@@ -0,0 +1,74 @@
+#!/bin/bash
+# author: https://github.com/adidik/git-repos-sync
+# sync two git repositories (github and gitlab)
+# modified: 23.4.2021 (MB)
+# License: MIT
+
+if [ "$#" -ne 3 ]; then
+    >&2 echo "Usage: git-repos-sync <repository URL> <repository URL> <branch-to-sync>"
+    exit 1
+fi
+
+if [ ! -d ".git" ]; then
+	echo "Git repo for syncronization is not found, creating one..."
+	git init
+	git fetch $1
+	git checkout -b master FETCH_HEAD	
+	echo
+fi
+
+if ! git diff-index --quiet HEAD --; then
+    >&2 echo "Local modifications found, looks like your in the conflict resolution. Resolve a conflict and commit. Then rerun script."
+    exit 1
+fi
+
+echo "Left: $1"
+echo "Right: $2"
+echo 
+echo "Fetch latest commits from branch $3 in $1"
+if ! git fetch -u $1 $3:left/$3; then 
+	>&2 echo "Fatal: unable to fetch from $1, rerun the script as soon as connnection restored."
+	exit 1
+fi 	
+echo "Fetch latest commits from branch $3 in $2"
+if ! git fetch -u $2 $3:right/$3; then
+	>&2 echo "Fatal: unable to fetch from $2, rerun the script as soon as connnection restored."
+	exit 1
+fi
+if git checkout --quiet -b sync-$3 right/$3; then
+	echo "Merge branches from left and right if necessary."
+	if ! git merge -m "Merge to sync between $1 and $2" --log left/$3; then
+                >&2 echo "Merge conflict. Solve is manually, commit and rerun script."
+                exit 1
+    fi
+else
+	echo "Rerun after merge conflict resolution or restored connection."
+	git checkout --quiet sync-$3
+	echo "Try to merge with right first"
+	if ! git merge -m "Merge to sync between $1 and $2" --log right/$3; then
+                >&2 echo "Merge conflict. Solve is manually, commit and rerun script."
+                exit 1
+    fi
+	if ! git merge -m "Merge to sync between $1 and $2" --log left/$3; then
+                >&2 echo "Merge conflict. Solve is manually, commit and rerun script."
+                exit 1
+    fi
+fi
+
+echo "Push merged changes in $3 to $2"
+if ! git push $2 HEAD:$3; then
+	>&2 echo "Fatal: unable to push to $2, rerun the script as soon as connection restored."
+	exit 1
+
+fi	
+echo "Push merged changes in $3 to $1"
+if ! git push $1 HEAD:$3; then
+	>&2 echo "Fatal: unable to push to $1, rerun the script as soon as connection restored."
+	exit 1
+
+fi	
+
+git checkout --quiet master
+git branch -D --quiet sync-$3
+
+echo "Done."