222 lines
5.9 KiB
Markdown
222 lines
5.9 KiB
Markdown
---
|
|
name: gh-cli
|
|
description: GitHub CLI for remote repository analysis, file fetching, codebase comparison, and discovering trending code/repos. Use when analyzing repos without cloning, comparing codebases, or searching for popular GitHub projects.
|
|
---
|
|
|
|
# GitHub CLI - Remote Analysis & Discovery
|
|
|
|
Remote repository operations, codebase comparison, and code discovery without cloning.
|
|
|
|
## When to Use
|
|
|
|
- Analyze repositories without cloning
|
|
- Compare codebases side-by-side
|
|
- Fetch specific files from any repo
|
|
- Find trending repositories and code patterns
|
|
- Search code across GitHub
|
|
|
|
## Quick Operations
|
|
|
|
### Fetch a file remotely
|
|
|
|
```bash
|
|
gh api repos/OWNER/REPO/contents/path/file.ts | jq -r '.content' | base64 -d
|
|
```
|
|
|
|
### Get directory listing
|
|
|
|
```bash
|
|
gh api repos/OWNER/REPO/contents/PATH
|
|
```
|
|
|
|
### Search code
|
|
|
|
```bash
|
|
gh search code "pattern" --language=typescript
|
|
```
|
|
|
|
### Find trending repos
|
|
|
|
```bash
|
|
gh search repos --language=rust --sort stars --order desc
|
|
```
|
|
|
|
## Compare Two Codebases
|
|
|
|
Systematic workflow for comparing repositories to identify similarities and differences.
|
|
|
|
**Example use**: "Compare solana-fm/explorer-kit and tenequm/solana-idls"
|
|
|
|
### Step 1: Fetch directory structures
|
|
|
|
```bash
|
|
gh api repos/OWNER-A/REPO-A/contents/PATH > repo1.json
|
|
gh api repos/OWNER-B/REPO-B/contents/PATH > repo2.json
|
|
```
|
|
|
|
If comparing a monorepo package, specify the path (e.g., `packages/explorerkit-idls`).
|
|
|
|
### Step 2: Compare file lists
|
|
|
|
```bash
|
|
jq -r '.[].name' repo1.json > repo1-files.txt
|
|
jq -r '.[].name' repo2.json > repo2-files.txt
|
|
diff repo1-files.txt repo2-files.txt
|
|
```
|
|
|
|
Shows files unique to each repo and common files.
|
|
|
|
### Step 3: Fetch key files for comparison
|
|
|
|
Compare package dependencies:
|
|
|
|
```bash
|
|
gh api repos/OWNER-A/REPO-A/contents/package.json | jq -r '.content' | base64 -d > repo1-pkg.json
|
|
gh api repos/OWNER-B/REPO-B/contents/package.json | jq -r '.content' | base64 -d > repo2-pkg.json
|
|
```
|
|
|
|
Compare main entry points:
|
|
|
|
```bash
|
|
gh api repos/OWNER-A/REPO-A/contents/src/index.ts | jq -r '.content' | base64 -d > repo1-index.ts
|
|
gh api repos/OWNER-B/REPO-B/contents/src/index.ts | jq -r '.content' | base64 -d > repo2-index.ts
|
|
```
|
|
|
|
### Step 4: Analyze differences
|
|
|
|
Compare the fetched files to identify:
|
|
|
|
**API Surface**
|
|
- What functions/classes are exported?
|
|
- Are the APIs similar or completely different?
|
|
|
|
**Dependencies**
|
|
- Shared dependencies (same approach)
|
|
- Different dependencies (different implementation)
|
|
|
|
**Unique Features**
|
|
- Features only in repo1
|
|
- Features only in repo2
|
|
|
|
For detailed comparison strategies, see [references/comparison.md](references/comparison.md).
|
|
|
|
## Discover Trending Content
|
|
|
|
### Find trending repositories
|
|
|
|
```bash
|
|
# Most starred repos
|
|
gh search repos --sort stars --order desc --limit 20
|
|
|
|
# Trending in specific language
|
|
gh search repos --language=rust --sort stars --order desc
|
|
|
|
# Recently popular (created in last month)
|
|
gh search repos "created:>2024-10-01" --sort stars --order desc
|
|
|
|
# Trending in specific topic
|
|
gh search repos "topic:machine-learning" --sort stars --order desc
|
|
```
|
|
|
|
### Discover popular code patterns
|
|
|
|
```bash
|
|
# Find popular implementations
|
|
gh search code "function useWallet" --language=typescript --sort indexed
|
|
|
|
# Find code in popular repos only
|
|
gh search code "implementation" "stars:>1000"
|
|
|
|
# Search specific organization
|
|
gh search code "authentication" --owner=anthropics
|
|
```
|
|
|
|
For complete discovery queries and patterns, see [references/discovery.md](references/discovery.md).
|
|
|
|
## Search Basics
|
|
|
|
### Code search
|
|
|
|
```bash
|
|
# Search across all repositories
|
|
gh search code "API endpoint" --language=python
|
|
|
|
# Search in specific organization
|
|
gh search code "auth" --owner=anthropics
|
|
|
|
# Exclude results with negative qualifiers
|
|
gh search issues -- "bug report -label:wontfix"
|
|
```
|
|
|
|
### Issue & PR search
|
|
|
|
```bash
|
|
# Find open bugs
|
|
gh search issues --label=bug --state=open
|
|
|
|
# Search assigned issues
|
|
gh search issues --assignee=@me --state=open
|
|
```
|
|
|
|
For advanced search syntax, see [references/search.md](references/search.md).
|
|
|
|
## Special Syntax
|
|
|
|
### Field name inconsistencies
|
|
|
|
**IMPORTANT:** GitHub CLI uses inconsistent field names across commands:
|
|
|
|
| Field | `gh repo view` | `gh search repos` |
|
|
|-------|----------------|-------------------|
|
|
| Stars | `stargazerCount` | `stargazersCount` |
|
|
| Forks | `forkCount` | `forksCount` |
|
|
|
|
**Examples:**
|
|
|
|
```bash
|
|
# ✅ Correct for gh repo view
|
|
gh repo view owner/repo --json stargazerCount,forkCount
|
|
|
|
# ✅ Correct for gh search repos
|
|
gh search repos "query" --json stargazersCount,forksCount
|
|
```
|
|
|
|
### Excluding search results
|
|
|
|
When using negative qualifiers (like `-label:bug`), use `--` to prevent the hyphen from being interpreted as a flag:
|
|
|
|
```bash
|
|
gh search issues -- "query -label:bug"
|
|
```
|
|
|
|
For more syntax gotchas, see [references/syntax.md](references/syntax.md).
|
|
|
|
## Advanced Workflows
|
|
|
|
For detailed documentation on specific workflows:
|
|
|
|
**Core Workflows:**
|
|
- [remote-analysis.md](references/remote-analysis.md) - Advanced file fetching patterns
|
|
- [comparison.md](references/comparison.md) - Complete codebase comparison guide
|
|
- [discovery.md](references/discovery.md) - All trending and discovery queries
|
|
- [search.md](references/search.md) - Advanced search syntax
|
|
- [syntax.md](references/syntax.md) - Special syntax and command quirks
|
|
|
|
**GitHub Operations:**
|
|
- [repositories.md](references/repositories.md) - Repository operations
|
|
- [pull_requests.md](references/pull_requests.md) - PR workflows
|
|
- [issues.md](references/issues.md) - Issue management
|
|
- [actions.md](references/actions.md) - GitHub Actions
|
|
- [releases.md](references/releases.md) - Release management
|
|
|
|
**Setup & Configuration:**
|
|
- [getting_started.md](references/getting_started.md) - Installation and auth
|
|
- [other.md](references/other.md) - Environment variables, aliases, config
|
|
- [extensions.md](references/extensions.md) - CLI extensions
|
|
|
|
## Resources
|
|
|
|
- Official docs: https://cli.github.com/manual/
|
|
- GitHub CLI: https://github.com/cli/cli
|
|
- Search syntax: https://docs.github.com/en/search-github
|