diff --git a/_vcsh b/_vcsh
index 4fe1e5f7009b553a3c5ff0bb617c9b0ecaa6ae3e..5a14f647a8971db6fca05a81d69cb7bf73dc136b 100644
--- a/_vcsh
+++ b/_vcsh
@@ -9,4 +9,5 @@ _arguments \
 		run\:"run command on repo"
 		init\:"init & clone from repo"
 		clone\:"clone from repo"
+		seed-gitignore\:"seed .gitignore.d/foo from git ls-files"
 	))'
diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index 541dba0bbffd394f0e16e64e17f87455040a74c3..270537785fd99bd5eda6601d1aa1186c2a189323 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -11,6 +11,8 @@ vcsh(1) - manage and sync config files via git
 
 `vcsh` list
 
+`vcsh` seed-gitignore
+
 `vcsh` help
 
 ## DESCRIPTION
@@ -34,20 +36,23 @@ A sample configuration for `vcsh` and `mr` can be found at
 ## OPTIONS
 
 * init:
-  Initialize an empty repository
+  Initialize an empty repository.
 
 * clone:
-  Clone an existing repository
+  Clone an existing repository.
 
 * run:
   Run command with <$GIT_DIR> and <$GIT_WORK_TREE> set. Allows you to run any
   and all commands without any restrictions. Use with care.
 
 * list:
-  List all local vcsh repositories
+  List all local vcsh repositories.
+
+* seed-gitignore:
+  Seed .gitignore.d/<repo> from git ls-files.
 
 * help:
-  Display help
+  Display help.
 
 ## ENVIRONMENT
 
diff --git a/vcsh b/vcsh
index c1b4874f5e78bcbbe5a8c8ccb2276f3ed25d23d9..18288805d4e7c94b99d1bee21d095556d75d034e 100755
--- a/vcsh
+++ b/vcsh
@@ -18,7 +18,6 @@ do
 	fi
 done
 
-
 debug() {
 	[ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1"
 }
@@ -42,7 +41,9 @@ help() {
 
    init <repo>       Initialize a new repository
    clone <remote> \\
-         [<repo>]    Clone from an existing repository" >&2
+         [<repo>]    Clone from an existing repository
+   seed-gitignore \\
+   <repo>            Seed .gitignore.d/<repo> from git ls-files" >&2
 }
 
 use() {
@@ -152,7 +153,7 @@ elif [ "$1" = 'clone' ]; then
 
 elif [ "$1" = 'init' ]; then
 	verbose "init begin"
-	[ -z $2 ] && help && return 0
+	[ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0
 	export REPO_NAME="$2"
 	export GIT_DIR="$VCSH_BASE/$REPO_NAME.git"
 	init
@@ -170,6 +171,26 @@ elif [ "$1" = 'init' ]; then
 #	verbose "exit end"
 #	exit 0
 
+elif [ "$1" = 'seed-gitignore' ]; then
+	verbose "seed-gitignore begin"
+	[ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0
+	use "$2"
+	files=$(git ls-files)
+	gitignores=$(for file in $(git ls-files); do
+		while true; do
+			echo $file; new="${file%/*}"
+			[ "$file" = "$new" ] && break
+			file="$new"
+		done;
+	done | sort -u | sed 's/^/!/')
+	[ -e .gitignore.d/$2 ] &&
+	echo "$SELF: .gitignore.d/$2 exists, moving it to .gitignore.d/$2.bak" &&
+	mv -f .gitignore.d/$2 .gitignore.d/$2.bak
+	echo '*' > .gitignore.d/$2
+	for gitignore in $gitignores; do
+		echo $gitignore >> .gitignore.d/$2
+	done
+
 else
 	verbose "defaulting to calling help()"
 	help