diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9afddb1cc1ee1f4f60baa154ad9f58b9fd109f42..f8cc942eab5dbc72b474dd2cb2d169d65633f7d1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,10 +5,8 @@ default:
     entrypoint: [""]
 
 build:
-  script:
+  before_script:
     - apk --no-cache add make git
-    - sh --version; git --version; pandoc --version
-    - git branch --verbose; git branch --verbose --remote
-    - make prepare wipe
-    - make
+    - git --version; pandoc --version
+  script:
     - make publish
diff --git a/Makefile b/Makefile
index 6fceec979b5cc525425151f0e3494e3514ee20a6..66863eb9a3a489ee405f52284b1cc5c975fc4109 100644
--- a/Makefile
+++ b/Makefile
@@ -9,36 +9,39 @@ OUT_MARKUP := $(SRC_MARKUP:$(SRC)/%.md=$(OUT)/%.php)
 OUT_OTHERS := $(SRC_OTHERS:$(SRC)/%=$(OUT)/%)
 OUT_DIRS   := $(SRC_DIRS:$(SRC)/%=$(OUT)/%)
 
-.PHONY: all prepare wipe publish clean
+.PHONY: prepare build publish clean
+.DEFAULT_GOAL := build
 
-all : $(OUT_MARKUP) $(OUT_OTHERS)
+prepare : $(OUT)/.git
 
-prepare : $(OUT)
-	git fetch origin public
-	git worktree add $(OUT) public
-	if [ -n "$${DEPLOY_TOKEN}" ]; then \
-		git config user.name  '${GITLAB_USER_NAME}'; \
-		git config user.email '${GITLAB_USER_EMAIL}'; \
-		git remote set-url origin "https://cicd:$${DEPLOY_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git"; \
-	fi
+build : $(OUT_MARKUP) $(OUT_OTHERS)
 
-wipe :
-	find $(OUT) -mindepth 1 -not -name '.git' -delete
-
-publish :
-	git -C $(OUT) add .
-	git -C $(OUT) commit --message 'Publish from $(shell git rev-parse HEAD)'
-	git -C $(OUT) push --push-option ci.skip origin 'HEAD:public'
+publish : | prepare build
+	if [ -n "$$(git -C $(OUT) status --porcelain)" ]; then \
+		cd $(OUT) ;\
+		git add . ;\
+		git commit --message 'Publish from $(shell git rev-parse HEAD)' ;\
+		git push --push-option ci.skip origin 'HEAD:public' ;\
+	fi
 
 clean :
 	rm -fr $(OUT)
 	git worktree prune
 
+$(OUT)/.git :
+	git fetch origin public
+	git worktree add --no-checkout $(OUT) public
+	if [ "$$CI" == 'true' -a -n "$$DEPLOY_TOKEN" ]; then \
+		git config user.name  "$$GITLAB_USER_NAME" ;\
+		git config user.email "$$GITLAB_USER_EMAIL" ;\
+		git remote set-url origin "https://cicd:$${DEPLOY_TOKEN}@$${CI_SERVER_HOST}/$${CI_PROJECT_PATH}.git" ;\
+	fi
+
 $(OUT) :
 	mkdir $(OUT)
 
 $(OUT_DIRS) : $(OUT)
-	mkdir -p $@
+	@mkdir -p $@
 
 .SECONDEXPANSION: # oooh, magic *_*