git-push-time 1.1.0 → 1.1.2
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/.github/workflows/npm-publish.yml +32 -0
- package/README.md +153 -149
- package/bin/index.js +339 -291
- package/lib/commands/edit-time.js +141 -127
- package/lib/commands/fix.js +113 -105
- package/lib/commands/github.js +445 -436
- package/lib/commands/pull.js +90 -88
- package/lib/commands/push.js +720 -653
- package/lib/config.js +220 -210
- package/lib/fix.js +286 -260
- package/lib/git.js +516 -452
- package/lib/github.js +322 -304
- package/lib/prompt-helpers.js +157 -25
- package/lib/secrets.js +92 -87
- package/lib/ui.js +1063 -844
- package/lib/utils.js +120 -106
- package/package.json +36 -32
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
name: Node.js Package
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
release:
|
|
7
|
+
types: [created]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: actions/setup-node@v4
|
|
15
|
+
with:
|
|
16
|
+
node-version: 20
|
|
17
|
+
- run: npm ci
|
|
18
|
+
- run: npm test
|
|
19
|
+
|
|
20
|
+
publish-npm:
|
|
21
|
+
needs: build
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
- uses: actions/setup-node@v4
|
|
26
|
+
with:
|
|
27
|
+
node-version: 20
|
|
28
|
+
registry-url: https://registry.npmjs.org/
|
|
29
|
+
- run: npm ci
|
|
30
|
+
- run: npm publish
|
|
31
|
+
env:
|
|
32
|
+
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
package/README.md
CHANGED
|
@@ -1,188 +1,191 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# 🐙 GitHub CLI (`githubcli`)
|
|
4
|
+
|
|
5
|
+
**Trợ lý GitHub trên terminal — đăng nhập, tạo repo, push/pull, quét secret — tất cả trong một chỗ.**
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/git-push-time)
|
|
8
|
+
[](./LICENSE)
|
|
9
|
+
[](https://nodejs.org)
|
|
10
|
+
[](https://github.com)
|
|
11
|
+
|
|
12
|
+
`githubcli` · `git-push-time` · `git-custom-push`
|
|
13
|
+
|
|
14
|
+
</div>
|
|
4
15
|
|
|
5
16
|
---
|
|
6
17
|
|
|
7
|
-
## ✨ Tính năng
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
## ✨ Tính năng
|
|
19
|
+
|
|
20
|
+
### 🐙 GitHub — trọng tâm chính
|
|
21
|
+
- **Đăng nhập linh hoạt**: OAuth Device Flow (mở trình duyệt, nhập mã) hoặc dán Personal Access Token.
|
|
22
|
+
- **Đa tài khoản**: lưu nhiều account, chuyển qua lại, tự nhận token từ `gh CLI` hoặc biến môi trường `GITHUB_TOKEN` / `GH_TOKEN`.
|
|
23
|
+
- **Tạo repository ngay trên terminal**: Public / Private, tự gợi ý tên theo folder, tạo xong hỏi đẩy code lên luôn.
|
|
24
|
+
- **Quản lý nhanh**: xem profile (`whoami`), duyệt repo cá nhân (`repos`), chọn repo từ danh sách không cần copy-paste URL.
|
|
25
|
+
- Token lưu local (`~/.git-push-time/config.json`, chmod 600).
|
|
26
|
+
|
|
27
|
+
### 🚀 Push / Pull
|
|
28
|
+
- **Push wizard 7 bước**: chọn folder → account → repository (chọn sẵn / tạo mới / dán URL) → branch → message → time → xác nhận & push.
|
|
29
|
+
- Tự động `git init`, `remote`, `add`, `commit`, `push`; hỗ trợ `--dir`, `--force`, `-y` chạy không hỏi.
|
|
30
|
+
- **Pull**: `pull` fast-forward, gợi ý `--rebase` khi lệch lịch sử.
|
|
31
|
+
- Nút `« Quay lại` mọi bước (hoặc gõ `..`).
|
|
32
|
+
|
|
33
|
+
### 🛡️ Secret Shield (chống lộ key, lỗi GH013)
|
|
34
|
+
- Quét file nhạy cảm (`.env`, `.npmrc`, private keys, API keys) trước khi push.
|
|
35
|
+
- Tự gỡ khỏi stage + thêm `.gitignore` (file trên máy vẫn giữ nguyên).
|
|
36
|
+
- Gợi ý squash các commit unpushed dính secret.
|
|
37
|
+
|
|
38
|
+
### 🎨 Terminal UI
|
|
39
|
+
- Dashboard hiển thị folder, branch, trạng thái GitHub, remote.
|
|
40
|
+
- Khung bo tròn đồng bộ, căn đều 2 bên, màu Cyberpunk / DevTools.
|
|
41
|
+
|
|
42
|
+
> ⏰ *Đổi thời gian commit (backdate / edit-time) chỉ là tiện ích bổ sung, xem ở [Phụ lục](#-phụ-lục-tiện-ích-thời-gian-commit).*
|
|
27
43
|
|
|
28
44
|
---
|
|
29
45
|
|
|
30
46
|
## 📦 Cài đặt
|
|
31
47
|
|
|
32
|
-
### Cách 1: Cài đặt toàn cục (Khuyên dùng)
|
|
33
48
|
```bash
|
|
49
|
+
# Cài toàn cục (khuyên dùng) — dùng được ở mọi thư mục
|
|
34
50
|
npm install -g git-push-time
|
|
35
|
-
```
|
|
36
|
-
Sau khi cài đặt, bạn có thể gọi lệnh `git-push-time`, `githubcli` hoặc `git-custom-push` ở bất kỳ thư mục nào!
|
|
37
51
|
|
|
38
|
-
|
|
39
|
-
```bash
|
|
52
|
+
# Hoặc chạy trực tiếp không cần cài
|
|
40
53
|
npx git-push-time
|
|
41
54
|
```
|
|
42
55
|
|
|
56
|
+
Yêu cầu: **Node.js ≥ 18** và **Git** đã cài đặt.
|
|
57
|
+
|
|
43
58
|
---
|
|
44
59
|
|
|
45
|
-
##
|
|
60
|
+
## ⚡ Bắt đầu nhanh (3 bước)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 1. Đăng nhập GitHub (mở trình duyệt, nhập mã xác nhận)
|
|
64
|
+
githubcli github login
|
|
65
|
+
|
|
66
|
+
# 2. Tạo repo mới (Public/Private), xong chọn đẩy code lên luôn
|
|
67
|
+
githubcli github create
|
|
68
|
+
|
|
69
|
+
# 3. Hoặc đẩy project hiện tại lên repo bất kỳ
|
|
70
|
+
githubcli -r https://github.com/username/my-repo.git -m "Initial commit" -b main -y
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Luồng wizard khi chạy tay `githubcli` (không kèm flag):
|
|
46
74
|
|
|
47
75
|
```text
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
✅ Đăng nhập thành công!
|
|
58
|
-
│
|
|
59
|
-
▼
|
|
60
|
-
git-push-time
|
|
61
|
-
│
|
|
62
|
-
├── 📁 1. Chọn folder project
|
|
63
|
-
│
|
|
64
|
-
├── 👤 2. Chọn GitHub account
|
|
65
|
-
│
|
|
66
|
-
├── 📦 3. Chọn repository (chọn có sẵn / tạo mới trực tiếp / dán URL)
|
|
67
|
-
│
|
|
68
|
-
├── 🌿 4. Chọn branch
|
|
69
|
-
│
|
|
70
|
-
├── 💬 5. Nhập commit message
|
|
71
|
-
│
|
|
72
|
-
├── ⏰ 6. Chọn commit time (ngay bây giờ / backdate lùi giờ / ngày cụ thể)
|
|
73
|
-
│
|
|
74
|
-
└── 🚀 7. Push (quét secret, commit & đẩy lên remote)
|
|
76
|
+
githubcli
|
|
77
|
+
│
|
|
78
|
+
├── 📁 1. Chọn folder project
|
|
79
|
+
├── 👤 2. Chọn GitHub account
|
|
80
|
+
├── 📦 3. Chọn repository (có sẵn / tạo mới / dán URL)
|
|
81
|
+
├── 🌿 4. Chọn branch
|
|
82
|
+
├── 💬 5. Nhập commit message
|
|
83
|
+
├── ⏰ 6. Chọn commit time (mặc định: ngay bây giờ)
|
|
84
|
+
└── 🚀 7. Xác nhận & Push (quét secret → commit → push)
|
|
75
85
|
```
|
|
76
86
|
|
|
77
87
|
---
|
|
78
88
|
|
|
79
|
-
##
|
|
89
|
+
## 🖥️ Giao diện
|
|
80
90
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
91
|
+
```text
|
|
92
|
+
╭─────────────── git-push-time v1.1.1 ───────────────╮
|
|
93
|
+
│ ▲ Folder E:\my-project │
|
|
94
|
+
│ → Branch main ● 5 file thay đổi │
|
|
95
|
+
│ ◆ GitHub @username ✓ đã đăng nhập │
|
|
96
|
+
│ ○ Remote username/my-repo │
|
|
97
|
+
╰─────────────────────────────────────────────────────╯
|
|
98
|
+
|
|
99
|
+
╭────────────────── Xác nhận ───────────────────────╮
|
|
100
|
+
│ Repo username/my-repo │
|
|
101
|
+
│ Branch main │
|
|
102
|
+
│ Message "Initial commit" │
|
|
103
|
+
│ Time now │
|
|
104
|
+
╰─────────────────────────────────────────────────────╯
|
|
85
105
|
```
|
|
86
|
-
Menu tương tác chính sẽ xuất hiện với các phân mục rõ ràng:
|
|
87
|
-
- `» [PUSH] | Đẩy code lên Git (kèm chọn folder, backdate & chống lộ secret)`
|
|
88
|
-
- `» [GITHUB] | Quản lý GitHub & Tạo repository mới`
|
|
89
|
-
- `» [PULL] | Cập nhật code mới về máy (Fast-forward / Rebase)`
|
|
90
|
-
- `» [TIME] | Sửa thời gian commit lịch sử`
|
|
91
|
-
- `» [FIX] | Quét & gỡ sạch secret khỏi repo`
|
|
92
|
-
- `x [THOÁT] | Kết thúc chương trình`
|
|
93
106
|
|
|
94
107
|
---
|
|
95
108
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
#### Tạo Repository mới trên GitHub ngay lập tức:
|
|
99
|
-
```bash
|
|
100
|
-
git-push-time github create
|
|
101
|
-
```
|
|
102
|
-
Hệ thống sẽ hỏi bạn:
|
|
103
|
-
1. **Tên Repository** (Mặc định tự lấy theo tên folder hiện tại).
|
|
104
|
-
2. **Mô tả dự án**.
|
|
105
|
-
3. **Quyền riêng tư**: Public hoặc Private.
|
|
106
|
-
4. **Hỏi đẩy code ngay**: Nếu chọn Có, CLI sẽ tự động liên kết remote và đẩy toàn bộ source code của bạn lên repo vừa tạo!
|
|
109
|
+
## 🛠️ Lệnh
|
|
107
110
|
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
git-push-time github whoami
|
|
111
|
-
```
|
|
111
|
+
### GitHub
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
| Lệnh | Mô tả |
|
|
114
|
+
| :--- | :--- |
|
|
115
|
+
| `githubcli github login` | Đăng nhập (OAuth Device Flow hoặc PAT — token cần quyền `repo`) |
|
|
116
|
+
| `githubcli github logout` | Đăng xuất, xóa token khỏi máy |
|
|
117
|
+
| `githubcli github whoami` | Xem profile tài khoản đang kết nối |
|
|
118
|
+
| `githubcli github repos` | Liệt kê repository cá nhân |
|
|
119
|
+
| `githubcli github create` | Tạo repo mới, hỏi đẩy code lên ngay |
|
|
120
|
+
| `githubcli github` | Mở menu quản lý GitHub tương tác |
|
|
117
121
|
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
git-push-time github login
|
|
121
|
-
```
|
|
122
|
-
*(Token cần có quyền `repo` để tạo và quản lý repository)*.
|
|
122
|
+
### Push / Pull / Fix
|
|
123
123
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
| Lệnh | Mô tả |
|
|
125
|
+
| :--- | :--- |
|
|
126
|
+
| `githubcli` | Mở dashboard tương tác (Push / GitHub / Pull / Time / Fix) |
|
|
127
|
+
| `githubcli -r <url> -m "<msg>" -b <branch> -y` | Push nhanh không hỏi lại |
|
|
128
|
+
| `githubcli --dir ./my-app -r <url> -m "Init" -y` | Chỉ push 1 thư mục con |
|
|
129
|
+
| `githubcli pull [remote] [branch]` | Kéo code mới (fast-forward, gợi ý `--rebase` khi cần) |
|
|
130
|
+
| `githubcli fix` | Quét & gỡ secret, cập nhật `.gitignore`, làm sạch commit unpushed |
|
|
131
|
+
|
|
132
|
+
### Flags khi push
|
|
133
|
+
|
|
134
|
+
| Flag | Ý nghĩa | Ví dụ |
|
|
135
|
+
| :--- | :--- | :--- |
|
|
136
|
+
| `-r, --repo <url>` | URL repository | `-r https://github.com/user/repo.git` |
|
|
137
|
+
| `-m, --message <msg>` | Commit message | `-m "Add login"` |
|
|
138
|
+
| `-b, --branch <branch>` | Branch remote (mặc định `main`) | `-b dev` |
|
|
139
|
+
| `-d, --date <time>` | Thời gian commit (mặc định `now`) | `-d "-2d"` |
|
|
140
|
+
| `-C, --dir <path>` | Thư mục nguồn | `--dir ./my-app` |
|
|
141
|
+
| `-f, --force` | Push đè (`--force`) | — |
|
|
142
|
+
| `-y, --yes` | Bỏ qua hỏi, dùng tham số/mặc định | — |
|
|
143
|
+
| `--fix` | Tự gỡ secret trước khi commit | — |
|
|
128
144
|
|
|
129
145
|
---
|
|
130
146
|
|
|
131
|
-
|
|
147
|
+
## 🔑 Token & đăng nhập
|
|
132
148
|
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
git-push-time -r https://github.com/username/my-repo.git -d "-2d" -m "Initial commit"
|
|
136
|
-
```
|
|
149
|
+
Thứ tự ưu tiên khi lấy token:
|
|
137
150
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
```
|
|
151
|
+
1. Biến môi trường `GITHUB_TOKEN` hoặc `GH_TOKEN`
|
|
152
|
+
2. Tài khoản active trong `~/.git-push-time/config.json`
|
|
153
|
+
3. Token từ `gh` CLI (`gh auth token`) nếu máy có cài
|
|
142
154
|
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
git-push-time -r https://github.com/username/my-repo.git -d "-5h" -m "Update docs" -b main -y --fix
|
|
146
|
-
```
|
|
155
|
+
---
|
|
147
156
|
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
git-push-time -r https://github.com/username/my-repo.git -m "Init" --dir ./my-app -y
|
|
151
|
-
```
|
|
157
|
+
## ⏳ Phụ lục: tiện ích thời gian commit
|
|
152
158
|
|
|
153
|
-
|
|
159
|
+
<details>
|
|
160
|
+
<summary><b>Mở rộng: backdate khi push & sửa commit cũ</b></summary>
|
|
154
161
|
|
|
155
|
-
|
|
162
|
+
<br>
|
|
156
163
|
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
git-push-time fix
|
|
160
|
-
```
|
|
164
|
+
Khi push có thể gắn thời gian tùy chỉnh bằng flag `-d`:
|
|
161
165
|
|
|
162
|
-
#### Cập nhật code mới từ remote:
|
|
163
166
|
```bash
|
|
164
|
-
git-
|
|
167
|
+
githubcli -r https://github.com/user/repo.git -d "-2d" -m "Initial commit" -y
|
|
168
|
+
githubcli -r https://github.com/user/repo.git -d "2024-01-15 14:30:00" -m "Add core" -y
|
|
165
169
|
```
|
|
166
170
|
|
|
167
|
-
|
|
171
|
+
Sửa thời gian commit đã có trong lịch sử:
|
|
172
|
+
|
|
168
173
|
```bash
|
|
169
|
-
|
|
174
|
+
githubcli edit-time
|
|
170
175
|
```
|
|
171
176
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
## 📊 Bảng định dạng thời gian hỗ trợ
|
|
175
|
-
|
|
176
|
-
| Định dạng ví dụ | Ý nghĩa |
|
|
177
|
+
| Định dạng | Ý nghĩa |
|
|
177
178
|
| :--- | :--- |
|
|
178
|
-
| `now`
|
|
179
|
-
| `-2d`
|
|
180
|
-
| `-5h`
|
|
181
|
-
| `-30m`
|
|
182
|
-
| `-1w`
|
|
183
|
-
| `-
|
|
184
|
-
| `2024-01-15 14:30:00` | Ngày
|
|
185
|
-
| `2024-01-15` | Ngày
|
|
179
|
+
| `now` / để trống | Giờ hiện tại |
|
|
180
|
+
| `-2d` / `2d` | Lùi 2 ngày |
|
|
181
|
+
| `-5h` / `5h` | Lùi 5 giờ |
|
|
182
|
+
| `-30m` / `30m` | Lùi 30 phút (`m` = minute) |
|
|
183
|
+
| `-1w` / `1w` | Lùi 1 tuần |
|
|
184
|
+
| `-3M` / `-3mo` | Lùi 3 tháng (`M` = month) |
|
|
185
|
+
| `2024-01-15 14:30:00` | Ngày giờ cụ thể |
|
|
186
|
+
| `2024-01-15` | Ngày cụ thể |
|
|
187
|
+
|
|
188
|
+
</details>
|
|
186
189
|
|
|
187
190
|
---
|
|
188
191
|
|
|
@@ -191,25 +194,26 @@ git-push-time edit-time
|
|
|
191
194
|
```
|
|
192
195
|
cli/
|
|
193
196
|
├── bin/
|
|
194
|
-
│ └── index.js #
|
|
197
|
+
│ └── index.js # Entrypoint & Commander dispatcher
|
|
195
198
|
├── lib/
|
|
196
|
-
│ ├── config.js #
|
|
197
|
-
│ ├── github.js #
|
|
198
|
-
│ ├── git.js #
|
|
199
|
-
│ ├── secrets.js # Quét
|
|
200
|
-
│ ├── fix.js #
|
|
201
|
-
│ ├── utils.js # Validate
|
|
202
|
-
│ ├── prompt-helpers.js #
|
|
203
|
-
│ ├── ui.js # Design
|
|
199
|
+
│ ├── config.js # Config & token GitHub local
|
|
200
|
+
│ ├── github.js # GitHub REST API (verify, repos, create)
|
|
201
|
+
│ ├── git.js # Tác vụ Git cốt lõi
|
|
202
|
+
│ ├── secrets.js # Quét secret trong stage
|
|
203
|
+
│ ├── fix.js # Gỡ secret & squash unpushed
|
|
204
|
+
│ ├── utils.js # Validate URL & parse datetime
|
|
205
|
+
│ ├── prompt-helpers.js # Prompt trong khung (Back '..')
|
|
206
|
+
│ ├── ui.js # Design system: Banner, Box, Dashboard
|
|
204
207
|
│ └── commands/
|
|
205
|
-
│ ├── push.js # Wizard push
|
|
206
|
-
│ ├── github.js #
|
|
207
|
-
│ ├── pull.js #
|
|
208
|
-
│ ├── edit-time.js #
|
|
209
|
-
│ └── fix.js #
|
|
208
|
+
│ ├── push.js # Wizard push tích hợp GitHub
|
|
209
|
+
│ ├── github.js # Menu & lệnh GitHub
|
|
210
|
+
│ ├── pull.js # Pull (--ff-only / --rebase)
|
|
211
|
+
│ ├── edit-time.js # Sửa thời gian commit
|
|
212
|
+
│ └── fix.js # Quét & sửa secret
|
|
210
213
|
```
|
|
211
214
|
|
|
212
215
|
---
|
|
213
216
|
|
|
214
217
|
## 📄 License
|
|
218
|
+
|
|
215
219
|
Phát hành theo giấy phép **MIT**.
|