GitHub Desktop 代ç åºåæ | AIçæåç¿»è¯
以䏿¯ GitHub Desktop ç详ç»è§£æï¼
GH DESKTOP 代ç åºæ¦è§
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ææ¯æ ï¼ Electron + TypeScript + React 16
代ç è¡æ°ï¼ ~189K è¡ TypeScript/TSX
æµè¯ï¼ 221 个æµè¯æä»¶ï¼åå
æµè¯ + 端å°ç«¯æµè¯ï¼
ä½ç§¯ï¼ 152 MB
许å¯è¯ï¼ MIT
æ¶æ
ââââââââââââ
Electron 主è¿ç¨
âââ app/src/main-process/main.ts
âââ AppWindowï¼BrowserWindow å
è£
å¨ï¼
âââ èåæå»ºå¨
âââ IPC å¤çå¨ï¼ipc-main.tsï¼
âââ å´©æºæ¥å
âââ éç¥ï¼desktop-notificationsï¼
âââ Squirrel æ´æ°å¨ï¼Windowsï¼
React 渲æè¿ç¨
âââ app/src/ui/index.tsx
âââ App.tsxï¼4005 è¡ â æ ¹ç»ä»¶ï¼
âââ Dispatcherï¼4235 è¡ â Flux 飿 ¼å¨ä½ååï¼
âââ ~80 个åè½ç®å½ï¼changes/ãdiff/ãbranches/ãcopilot/â¦â¦ï¼
å
±äº«åºå±
âââ app/src/lib/
âââ stores/ â AppStoreãGitStoreãCopilotStoreâ¦â¦
âââ git/ â éè¿ `dugite`ï¼å
ç½® gitï¼å°è£
ç Git CLI
âââ api/ â GitHub REST API 客æ·ç«¯
âââ copilot/ â AI æäº¤ä¿¡æ¯ + å²çªè§£å³
âââ ssh/ â SSH å¯é¥ç®¡ç
âââ trampoline/ â åæ®å©æè·³æ¿
âââ hooks/ â Git é©åéæ
å
³é®ä¾èµ
ââââââââââââââââ
dugite ^3.2.2 â å
ç½® git äºè¿å¶ + TypeScript ç»å®
react ^16.8.4 â UI æ¡æ¶
codemirror ^5.65.17 â Diff ç¼è¾å¨
keytar ^7.8.0 â æä½ç³»ç»å¯é¥é¾éæ
@github/copilot-sdk â AI æäº¤ä¿¡æ¯ & å²çªè§£å³
desktop-notifications â åçæä½ç³»ç»éç¥ï¼å
åµï¼
event-kit â äºä»¶åå°å¨/å¯éæ¯æ¨¡å¼
Git å·¥ä½åç
âââââââââââââ
ææ Git æä½é½éè¿ lib/git/core.ts å®ç°ï¼è¯¥æä»¶å°è£
äº
`dugite`ï¼å
ç½® git äºè¿å¶ï¼ãç¤ºä¾æµç¨ï¼
1. UI å¨ä½ï¼ä¾å¦ï¼ç¹å»æäº¤æé®ï¼
2. Dispatcher ååå¨ä½
3. AppStore è°ç¨ GitStore
4. GitStore è°ç¨ lib/git/commit.ts
5. commit.ts è°ç¨ core.ts ä¸ç `git()`
6. core.ts éè¿ dugite.exec() çæåè¿ç¨
7. è§£æç»æï¼æ´æ°ç¶æï¼UI éæ°æ¸²æ
æ¯ä¸ª Git æä½å¯¹åºä¸ä¸ªç¬ç«æä»¶ï¼
commit.tsãcheckout.tsãclone.tsãdiff.tsãmerge.tsã
rebase.tsãcherry-pick.tsãfetch.tsãpush.tsãpull.tsâ¦â¦
AI åè½ï¼Copilotï¼
ââââââââââââââââââââââ
- AI çæçæäº¤ä¿¡æ¯ï¼copilot-commit-message.tsï¼
- AI å²çªè§£å³ï¼copilot-conflict-resolution.tsï¼
- BYOK æä¾ç¨åºï¼èªå¸¦å¯é¥ï¼éè¿ copilot/byok.ts
- CopilotStore éè¿ @github/copilot-sdk 管çä¼è¯
- UIï¼generate-commit-message/ãcopilot/ å¯¹è¯æ¡
Flux æ¶æ
âââââââââââââââââ
ç»å
¸ Flux 模å¼ï¼
å¨ä½ â Dispatcher â Store â View â å¨ä½
- Dispatcher.tsï¼4235 è¡ï¼å¤çææç¨æ·æä½
- AppStoreï¼ä¸å¤®ç¶æï¼ååºåæ´äºä»¶
- ä¸ç¨ Storeï¼GitStoreãCopilotStoreãIssuesStore ç
- ç¶æå®ä¹å¨ app-state.tsï¼~800 è¡ç±»åå®ä¹ï¼
æå»ºç³»ç»
ââââââââââââ
script/build.ts â TypeScript æå»ºç¼æå¨
script/start.ts â å¼å模å¼å¯å¨å¨
script/package.ts â æå
åå
script/dist-info.ts â å¹³å°ç¹å®ååé
ç½®
yarn workspaces â åä½ä»åºï¼æ ¹ç®å½ + app/ï¼
æµè¯
âââââ
app/test/unit/ â åå
æµè¯ï¼221 个æä»¶ï¼
app/test/e2e/ â 端å°ç«¯æµè¯
app/test/fixtures/ â æµè¯æ°æ®
æµè¯è¿è¡å¨ï¼jestï¼éè¿ script/test.mjsï¼
éå¯¹ä½ å ³æ³¨çéç¹æ»ç»ï¼
-
Git éæåªæ¯ CLI å è£ å¨ â
dugiteæç»äºçæ£ç git äºè¿å¶ï¼æ¯ä¸ªæä½é½ä¼çæåè¿ç¨ãlib/git/*.tsä¸ç模å¼å¾æ¸ æ°ï¼æ¯ä¸ª git å½ä»¤å¯¹åºä¸ä¸ªå½æ°ï¼å¸¦æç±»åååæ°åç»æã -
Copilot SDK å·²éæ â ä»ä»¬ä½¿ç¨
@github/copilot-sdkå®ç° AI æäº¤ä¿¡æ¯ååå¹¶å²çªè§£å³ãcopilot/byok.tsä¸ç BYOKï¼èªå¸¦å¯é¥ï¼æ¯ææå³çä½ å¯ä»¥æ¥å ¥é GitHub 模åã -
Flux èé Redux â ä»ä»¬ä½¿ç¨
event-kitï¼äºä»¶åå°å¨ + å¯éæ¯å¯¹è±¡ï¼èªè¡å®ç°äº Fluxãæ²¡æ Reduxï¼æ²¡æ MobXãDispatcher æ¯æææä½çå¯ä¸ç宿¥æºã -
React 16 â ä»å¤äºè¾æ§çç±»ç»ä»¶æ¶ä»£ Reactãæ²¡æå¤§éä½¿ç¨ hooks çæ¨¡å¼ã
-
189K è¡ TypeScript â 代ç åºè§æ¨¡åºå¤§ã
lib/å±ï¼294 个æä»¶ï¼æ¯å¯å¤ç¨æ ¸å¿ï¼ui/ï¼464 个æä»¶ï¼æ¯ç¹å®äº Electron çæ¸²æé¨åã
