git-easy-worktree 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -2
- package/dist/index.js +75 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,29 +18,87 @@ npm link
|
|
|
18
18
|
## Usage
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
git-wt
|
|
21
|
+
git-wt [repo-url] [branch-name ...] [options]
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
If `repo-url` or branch names are missing, the CLI will prompt you to enter them interactively.
|
|
25
|
+
|
|
26
|
+
You can provide multiple branch names in either of these formats:
|
|
27
|
+
|
|
28
|
+
- Space-separated: `git-wt <repo-url> dev test release`
|
|
29
|
+
- Comma-separated: `git-wt <repo-url> "dev,test,release"`
|
|
30
|
+
|
|
24
31
|
### Options
|
|
25
32
|
|
|
26
33
|
- `-d, --dir <directory>`: Base directory for worktrees (default: current directory)
|
|
27
34
|
|
|
35
|
+
### Input modes
|
|
36
|
+
|
|
37
|
+
- Full args: `git-wt <repo-url> <branch...>`
|
|
38
|
+
- Partial args: `git-wt <repo-url>` (CLI prompts for branches)
|
|
39
|
+
- No args: `git-wt` (CLI prompts for repo URL and branches)
|
|
40
|
+
|
|
41
|
+
> In non-interactive mode (for example CI), you must pass both repo URL and branch names in arguments.
|
|
42
|
+
|
|
43
|
+
### Branch parsing rules
|
|
44
|
+
|
|
45
|
+
- Supports both separators: spaces and commas
|
|
46
|
+
- Trims spaces automatically
|
|
47
|
+
- De-duplicates repeated branch names
|
|
48
|
+
- Keeps the input order for creation
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
git-wt <repo-url> "dev, test dev release"
|
|
54
|
+
# => creates: dev, test, release
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### What the command does
|
|
58
|
+
|
|
59
|
+
1. Resolves repo directory name from URL
|
|
60
|
+
2. Creates/updates a local bare repository at `<base-dir>/<repo>/.bare`
|
|
61
|
+
3. Creates one worktree directory per branch at `<base-dir>/<repo>/<branch>`
|
|
62
|
+
4. If a branch does not exist in remote, creates a new local branch automatically
|
|
63
|
+
|
|
28
64
|
### Example
|
|
29
65
|
|
|
30
66
|
```bash
|
|
31
67
|
# Create a worktree for the 'master' branch of Hello-World
|
|
32
68
|
git-wt https://github.com/octocat/Hello-World.git master
|
|
33
69
|
|
|
70
|
+
# Create worktrees for multiple branches
|
|
71
|
+
git-wt https://github.com/octocat/Hello-World.git dev test release
|
|
72
|
+
|
|
73
|
+
# Create worktrees using comma-separated branches
|
|
74
|
+
git-wt https://github.com/octocat/Hello-World.git "feature/a,feature/b"
|
|
75
|
+
|
|
76
|
+
# Provide URL only, then input branches interactively
|
|
77
|
+
git-wt https://github.com/octocat/Hello-World.git
|
|
78
|
+
|
|
79
|
+
# Start interactive input mode
|
|
80
|
+
git-wt
|
|
81
|
+
|
|
34
82
|
# Resulting structure:
|
|
35
83
|
# ./Hello-World/
|
|
36
84
|
# .bare/ (Bare repository)
|
|
37
85
|
# master/ (Worktree)
|
|
86
|
+
# dev/ (Worktree, if requested)
|
|
38
87
|
```
|
|
39
88
|
|
|
89
|
+
## Troubleshooting
|
|
90
|
+
|
|
91
|
+
- `Missing required arguments in non-interactive mode`
|
|
92
|
+
Pass both URL and branch names directly, for example:
|
|
93
|
+
`git-wt https://github.com/octocat/Hello-World.git main`
|
|
94
|
+
|
|
95
|
+
- `Worktree path ... already exists`
|
|
96
|
+
The target branch folder already exists in base dir. Use a different branch name or remove the existing folder first.
|
|
97
|
+
|
|
40
98
|
## Development
|
|
41
99
|
|
|
42
100
|
```bash
|
|
43
101
|
npm install
|
|
44
|
-
npm run dev -- <url> <branch
|
|
102
|
+
npm run dev -- <url> <branch...>
|
|
45
103
|
npm run build
|
|
46
104
|
```
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import boxen from 'boxen';
|
|
|
9
9
|
import figlet from 'figlet';
|
|
10
10
|
import gradient from 'gradient-string';
|
|
11
11
|
import { createRequire } from 'node:module';
|
|
12
|
+
import { createInterface } from 'node:readline/promises';
|
|
12
13
|
const require = createRequire(import.meta.url);
|
|
13
14
|
const { version } = require('../package.json');
|
|
14
15
|
const MISSING_BRANCH_PATTERNS = ['invalid reference', 'not a valid object name'];
|
|
@@ -31,14 +32,64 @@ const resolveRepoName = (url) => {
|
|
|
31
32
|
}
|
|
32
33
|
return repoName;
|
|
33
34
|
};
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
const splitBranchInput = (value) => value
|
|
36
|
+
.split(/[,\s]+/)
|
|
37
|
+
.map((branch) => branch.trim())
|
|
38
|
+
.filter(Boolean);
|
|
39
|
+
const normalizeBranches = (branchArgs) => {
|
|
40
|
+
if (!branchArgs) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
return Array.from(new Set(branchArgs.flatMap(splitBranchInput)));
|
|
44
|
+
};
|
|
45
|
+
const promptRequiredValue = async (label) => {
|
|
46
|
+
const rl = createInterface({
|
|
47
|
+
input: process.stdin,
|
|
48
|
+
output: process.stdout,
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
while (true) {
|
|
52
|
+
const value = (await rl.question(`${label}: `)).trim();
|
|
53
|
+
if (value) {
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
console.log(chalk.yellow(`${label} is required.`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
rl.close();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const promptRequiredBranches = async () => {
|
|
64
|
+
while (true) {
|
|
65
|
+
const value = await promptRequiredValue('Enter branch name(s), separated by comma or space');
|
|
66
|
+
const branches = normalizeBranches([value]);
|
|
67
|
+
if (branches.length > 0) {
|
|
68
|
+
return branches;
|
|
69
|
+
}
|
|
70
|
+
console.log(chalk.yellow('At least one branch name is required.'));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const resolveInputs = async (urlArg, branchArgs, dirArg) => {
|
|
74
|
+
let url = urlArg?.trim();
|
|
75
|
+
let branches = normalizeBranches(branchArgs);
|
|
37
76
|
const dir = dirArg.trim() || process.cwd();
|
|
38
|
-
if (!url ||
|
|
39
|
-
|
|
77
|
+
if (!url || branches.length === 0) {
|
|
78
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
79
|
+
throw new Error('Missing required arguments in non-interactive mode. Usage: git-wt <repo-url> <branch-name...> [options]');
|
|
80
|
+
}
|
|
81
|
+
console.log(chalk.cyan('Missing arguments, entering interactive input mode.'));
|
|
82
|
+
if (!url) {
|
|
83
|
+
url = await promptRequiredValue('Enter Git repository URL');
|
|
84
|
+
}
|
|
85
|
+
if (branches.length === 0) {
|
|
86
|
+
branches = await promptRequiredBranches();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!url || branches.length === 0) {
|
|
90
|
+
throw new Error('Usage: git-wt <repo-url> <branch-name...> [options]');
|
|
40
91
|
}
|
|
41
|
-
return { url,
|
|
92
|
+
return { url, branches, dir };
|
|
42
93
|
};
|
|
43
94
|
const ensureBareRepository = async (url, bareRepoPath, spinner) => {
|
|
44
95
|
const git = simpleGit();
|
|
@@ -99,28 +150,36 @@ const run = async () => {
|
|
|
99
150
|
printBanner();
|
|
100
151
|
program
|
|
101
152
|
.name('git-wt')
|
|
102
|
-
.description('A CLI tool to create git worktrees from a repository URL and branch name')
|
|
153
|
+
.description('A CLI tool to create git worktrees from a repository URL and branch name(s)')
|
|
103
154
|
.version(version)
|
|
104
|
-
.argument('
|
|
105
|
-
.argument('
|
|
155
|
+
.argument('[url]', 'Git repository URL')
|
|
156
|
+
.argument('[branches...]', 'Branch name(s) to checkout')
|
|
106
157
|
.option('-d, --dir <directory>', 'Base directory for worktrees', process.cwd())
|
|
107
|
-
.action(async (urlArg,
|
|
158
|
+
.action(async (urlArg, branchArgs, options) => {
|
|
108
159
|
const spinner = ora();
|
|
109
160
|
try {
|
|
110
|
-
const { url,
|
|
161
|
+
const { url, branches, dir } = await resolveInputs(urlArg, branchArgs, options.dir);
|
|
111
162
|
const repoName = resolveRepoName(url);
|
|
112
163
|
const baseDir = path.resolve(dir);
|
|
113
164
|
const repoDir = path.join(baseDir, repoName);
|
|
114
165
|
const bareRepoPath = path.join(repoDir, '.bare');
|
|
115
|
-
const
|
|
166
|
+
const [firstBranch] = branches;
|
|
167
|
+
if (!firstBranch) {
|
|
168
|
+
throw new Error('No branch names were provided.');
|
|
169
|
+
}
|
|
116
170
|
await fs.ensureDir(repoDir);
|
|
117
171
|
await ensureBareRepository(url, bareRepoPath, spinner);
|
|
118
|
-
|
|
119
|
-
const
|
|
172
|
+
const worktreeDetails = [];
|
|
173
|
+
for (const branch of branches) {
|
|
174
|
+
const worktreePath = path.join(repoDir, branch);
|
|
175
|
+
await createWorktree(bareRepoPath, worktreePath, branch, spinner);
|
|
176
|
+
worktreeDetails.push(`- ${chalk.cyan(branch)}: ${chalk.cyan(worktreePath)}`);
|
|
177
|
+
}
|
|
178
|
+
const relativeWorktreePath = path.relative(process.cwd(), path.join(repoDir, firstBranch)) || '.';
|
|
120
179
|
console.log('\n' +
|
|
121
180
|
boxen(chalk.green('🎉 All done! \n\n') +
|
|
122
|
-
`📂
|
|
123
|
-
`🌿
|
|
181
|
+
`📂 Repository: ${chalk.cyan(repoDir)}\n` +
|
|
182
|
+
`🌿 Worktrees:\n${worktreeDetails.join('\n')}\n\n` +
|
|
124
183
|
chalk.dim(`cd ${relativeWorktreePath}`), { padding: 1, borderStyle: 'round', borderColor: 'green' }));
|
|
125
184
|
}
|
|
126
185
|
catch (error) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|