docs: add projects and shell integration sections to README
Some checks failed
continuous-integration/drone/push Build encountered an error
Some checks failed
continuous-integration/drone/push Build encountered an error
This commit is contained in:
68
README.md
68
README.md
@@ -110,3 +110,71 @@ list_branches_command = "jj -R {{ bare_path }} bookmark list -T 'name ++ \"\\n\"
|
|||||||
```
|
```
|
||||||
|
|
||||||
Available template variables for worktree commands: `bare_path`, `worktree_path`, `branch`, `ssh_url`.
|
Available template variables for worktree commands: `bare_path`, `worktree_path`, `branch`, `ssh_url`.
|
||||||
|
|
||||||
|
### Projects
|
||||||
|
|
||||||
|
gitnow supports scratch-pad projects that group multiple repositories into a single directory. This is useful when working on features that span several repos.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create a new project (interactive repo selection)
|
||||||
|
gitnow project create my-feature
|
||||||
|
|
||||||
|
# Create from a template
|
||||||
|
gitnow project create my-feature -t default
|
||||||
|
|
||||||
|
# Open an existing project (interactive selection)
|
||||||
|
gitnow project
|
||||||
|
|
||||||
|
# Open by name
|
||||||
|
gitnow project my-feature
|
||||||
|
|
||||||
|
# Add more repos to a project
|
||||||
|
gitnow project add my-feature
|
||||||
|
|
||||||
|
# Delete a project
|
||||||
|
gitnow project delete my-feature
|
||||||
|
```
|
||||||
|
|
||||||
|
Project directories live at `~/.gitnow/projects/` by default. Templates live at `~/.gitnow/templates/`. Both are configurable:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[settings.project]
|
||||||
|
directory = "~/.gitnow/projects"
|
||||||
|
templates_directory = "~/.gitnow/templates"
|
||||||
|
```
|
||||||
|
|
||||||
|
Commands that navigate to a directory (`gitnow`, `gitnow project`, `gitnow project create`, `gitnow worktree`) will `cd` you there when using the shell integration. Commands that don't produce a path (`project add`, `project delete`, `update`) run normally without changing your directory.
|
||||||
|
|
||||||
|
### Shell integration
|
||||||
|
|
||||||
|
The recommended way to use gitnow is with shell integration, which uses a **chooser file** to communicate the selected path back to your shell:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eval $(gitnow init zsh)
|
||||||
|
git-now # or gn
|
||||||
|
```
|
||||||
|
|
||||||
|
When you run `git-now`, the shell wrapper:
|
||||||
|
|
||||||
|
1. Creates a temporary chooser file
|
||||||
|
2. Runs `gitnow` with the `GITNOW_CHOOSER_FILE` env var pointing to it
|
||||||
|
3. If gitnow writes a path to the file, the wrapper `cd`s there
|
||||||
|
4. If the file is empty (e.g. after `git-now project delete`), no `cd` happens
|
||||||
|
|
||||||
|
This works uniformly for all subcommands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git-now # pick a repo and cd there
|
||||||
|
git-now project # pick a project and cd there
|
||||||
|
git-now project create foo # create project and cd there
|
||||||
|
git-now project delete foo # deletes project, no cd
|
||||||
|
git-now worktree # pick repo+branch worktree, cd there
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also set the chooser file manually for scripting:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
GITNOW_CHOOSER_FILE=/tmp/choice gitnow project
|
||||||
|
# or
|
||||||
|
gitnow --chooser-file /tmp/choice project
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user