Skip to content

Commit

Permalink
Merge pull request #599 from thockin/master
Browse files Browse the repository at this point in the history
Document filesystem-volumes issue
  • Loading branch information
k8s-ci-robot authored Aug 1, 2022
2 parents 8d03329 + 037af64 commit bc865d0
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,24 @@ docker run -d \
nginx
```

### Volumes

The `--root` flag must indicate either a directory that either a) does not
exist (it will be created); or b) exists and is empty; or c) can be emptied by
removing all of the contents.

Why? Git demands to clone into an empty directory. If the directory exists
and is not empty, git-sync will try to empty it by removing everything in it
(we can't just `rm -rf` the dir because it might be a mounted volume). If that
fails, git-sync will abort.

With the above example or with a Kubernetes `emptyDir`, there is usually no
problem. The problematic case is when the volume is the root of a filesystem,
which sometimes contains metadata (e.g. ext{2,3,4} have a `lost+found` dir).
Git will not clone into such a directory (`fatal: destination path
'/tmp/git-data' already exists and is not an empty directory`). The only real
solution is to use a sub-directory of the volume as the `--root`.

## Manual

```
Expand Down
7 changes: 5 additions & 2 deletions cmd/git-sync/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,7 @@ func main() {
if initialSync {
err := git.InitRepo(ctx)
if err != nil {
log.Error(err, "can't init root", absRoot)
log.Error(err, "can't init root", "path", absRoot)
os.Exit(1)
}
}
Expand Down Expand Up @@ -1841,7 +1841,10 @@ OPTIONS
--root <string>, $GIT_SYNC_ROOT
The root directory for git-sync operations, under which --link will
be created. This flag is required.
be created. This must be a path that either a) does not exist (it
will be created); b) is an empty directory; or c) is a directory
which can be emptied by removing all of the contents. This flag is
required.
--sparse-checkout-file, $GIT_SYNC_SPARSE_CHECKOUT_FILE
The path to a git sparse-checkout file (see git documentation for
Expand Down

0 comments on commit bc865d0

Please sign in to comment.