# Persistence and reopening
`Store::open` accepts bare and ordinary Git repositories. It creates a bare
repository only when the path is missing or an existing directory is empty. A
nonempty directory that is not a repository is rejected without changing it.
```rust,no_run
use git_vdb::{open, Point};
fn main() -> git_vdb::Result<()> {
let path = "./vectors.git";
open(path)?.collection("docs").upsert([
Point::new("stable-id", [1.0, 0.0]),
])?;
let reopened = open(path)?.collection("docs");
assert_eq!(reopened.count()?, 1);
Ok(())
}
```
Collection handles are inexpensive and can be cloned. Reads never create a
missing collection. The first nonempty upsert creates it and infers its
dimension; explicitly configured empty collections remain available through
`Database::create_collection`.