]> git.cworth.org Git - nogit/commitdiff
Provide a simple implementation of "nogit sync"
authorCarl Worth <cworth@cworth.org>
Sun, 5 Jul 2020 05:58:25 +0000 (22:58 -0700)
committerCarl Worth <cworth@cworth.org>
Sun, 5 Jul 2020 05:58:25 +0000 (22:58 -0700)
There's one piece of this that requires a cooperating
repository. Specifically, nogit really wants a merge with no input
required from the user. The "union" merge driver does what we want
here, (putting lines from both sides into the files without conflict
markers). The only trick is that there's no way (that I've found at
least) to request this merge driver from the command line of the "git
merge" invocation. Instead, we need a .gitattributes file to specify
"merge=union".

So, for now, we're relying on the repository being used with nogit to
provide a working .gitattributes file that specifies "merge=union" for
all appropriate paths.

nogit

diff --git a/nogit b/nogit
index b9a248e3f638ad9e2a203a1b8f77dd47601b4454..212ca33094e7c0af1f4fac7070747dab96f2a14c 100755 (executable)
--- a/nogit
+++ b/nogit
@@ -103,7 +103,17 @@ nogit_clone()
 
 nogit_sync()
 {
-    echo "Internal error: 'nogit sync' not yet implemented"
+    # First commit any locally modified nogit files
+    GIT_DIR=$NOGIT_DIR git commit -a -m "nogit-sync commit" >/dev/null 2>&1 || true
+
+    # Then, fetch and merge any upstream changes
+    GIT_DIR=$NOGIT_DIR git fetch >/dev/null 2>&1
+    GIT_DIR=$NOGIT_DIR git merge -m "nogit-sync merge" >/dev/null 2>&1
+
+    # Finally, push any new commits up to the upstream repository
+    GIT_DIR=$NOGIT_DIR git push >/dev/null 2>&1
+
+    echo "Completed nogit sync"
 }
 
 if [ $# -lt 1 ]; then