diff --git a/kicad-cleanup-repo b/kicad-cleanup-repo
new file mode 100755
index 0000000000000000000000000000000000000000..457c735a6df941ddb6f1a44b86f438d32c647a23
--- /dev/null
+++ b/kicad-cleanup-repo
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+echo -n  "Are you sure you wan't to rewrite git history [no/yes] "
+read -r LINE
+if [[ "${LINE}" == "yes" ]] ; then
+   HOME=/dev/null git filter-branch \
+                      --prune-empty \
+                      --tree-filter "$(dirname $0)/kicad-filter-branch" HEAD
+fi
\ No newline at end of file
diff --git a/kicad-filter-branch b/kicad-filter-branch
new file mode 100755
index 0000000000000000000000000000000000000000..b5396c9389cd10925a9db1955c33655f571b7529
--- /dev/null
+++ b/kicad-filter-branch
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+echo
+cat<<EOF > .gitattributes
+*.pro filter=kicad-pro
+*.sch ident
+*.sch filter=kicad-sch
+EOF
+ls 1>&2
+for f in * .??* ; do
+    echo "$(git hash-object $f) $f"
+done
+
+for f in $(find . -name '*.sch') ; do
+    TMP=$(mktemp)
+    echo "Cleaning $f" 1>&2
+    cat "$f" | $(dirname "$0")/kicad-sch-filter clean "$f" > "${TMP}"
+    mv "${TMP}" "$f"
+done
+for f in $(find . -name '*.pro') ; do
+    TMP=$(mktemp)
+    echo "Cleaning $f" 1>&2
+    cat "$f" | $(dirname "$0")/kicad-pro-filter clean "$f" > "${TMP}"
+    mv "${TMP}" "$f"
+done