Forking might be easier to debug.. but I think I might have missed some of the functionality in your script.. something like (totally untested):
(while true
do
inotifywait \
--exclude '.*\.sw.' \
--recursive \
--event close_write \
--event delete \
--event moved_to \
--event moved_from \
dir1/
git push
sleep 0.1
done
) 2>&1 >/var/log/push_log.log &
(while true
do
cat << 'EOF' | ssh remotebox
inotifywait \
--exclude '.*\.sw.' \
--recursive \
--event close_write \
--event delete \
--event moved_to \
--event moved_from \
dir1/
git push #??
sleep 0.1
EOF # (second EOF cannot be indented)
done
) 2>&1 >/var/log/pull_log.log &
echo "Kicked off pull and push processes."
wait