← Sandbox SDK / sandbox / guides
Работа с Git
В этом руководстве показано, как клонировать репозитории, управлять ветками и автоматизировать операции Git в песочнице.
Клонирование репозиториев
import { getSandbox } from "@cloudflare/sandbox";
const sandbox = getSandbox(env.Sandbox, "my-sandbox");
// Basic clone
await sandbox.gitCheckout("https://github.com/user/repo");
// Clone specific branch
await sandbox.gitCheckout("https://github.com/user/repo", {
branch: "develop",
});
// Shallow clone (faster for large repos)
await sandbox.gitCheckout("https://github.com/user/large-repo", {
depth: 1,
});
// Clone to specific directory
await sandbox.gitCheckout("https://github.com/user/my-app", {
targetDir: "/workspace/project",
});import { getSandbox } from '@cloudflare/sandbox';
const sandbox = getSandbox(env.Sandbox, 'my-sandbox');
// Basic clone
await sandbox.gitCheckout('https://github.com/user/repo');
// Clone specific branch
await sandbox.gitCheckout('https://github.com/user/repo', {
branch: 'develop'
});
// Shallow clone (faster for large repos)
await sandbox.gitCheckout('https://github.com/user/large-repo', {
depth: 1
});
// Clone to specific directory
await sandbox.gitCheckout('https://github.com/user/my-app', {
targetDir: '/workspace/project'
});Клонирование приватных репозиториев
Используйте личный токен доступа в URL:
const token = env.GITHUB_TOKEN;
const repoUrl = `https://${token}@github.com/user/private-repo.git`;
await sandbox.gitCheckout(repoUrl);const token = env.GITHUB_TOKEN;
const repoUrl = `https://${token}@github.com/user/private-repo.git`;
await sandbox.gitCheckout(repoUrl);Клонирование и сборка
Клонируйте репозиторий и выполните шаги сборки:
await sandbox.gitCheckout("https://github.com/user/my-app");
const repoName = "my-app";
// Install and build
await sandbox.exec(`cd ${repoName} && npm install`);
await sandbox.exec(`cd ${repoName} && npm run build`);
console.log("Build complete");await sandbox.gitCheckout('https://github.com/user/my-app');
const repoName = 'my-app';
// Install and build
await sandbox.exec(`cd ${repoName} && npm install`);
await sandbox.exec(`cd ${repoName} && npm run build`);
console.log('Build complete');Работа с ветками
await sandbox.gitCheckout("https://github.com/user/repo");
// Switch branches
await sandbox.exec("cd repo && git checkout feature-branch");
// Create new branch
await sandbox.exec("cd repo && git checkout -b new-feature");await sandbox.gitCheckout('https://github.com/user/repo');
// Switch branches
await sandbox.exec('cd repo && git checkout feature-branch');
// Create new branch
await sandbox.exec('cd repo && git checkout -b new-feature');Внесите изменения и выполните commit
await sandbox.gitCheckout("https://github.com/user/repo");
// Modify a file
const readme = await sandbox.readFile("/workspace/repo/README.md");
await sandbox.writeFile(
"/workspace/repo/README.md",
readme.content + "\n\n## New Section",
);
// Commit changes
await sandbox.exec('cd repo && git config user.name "Sandbox Bot"');
await sandbox.exec('cd repo && git config user.email "[email protected]"');
await sandbox.exec("cd repo && git add README.md");
await sandbox.exec('cd repo && git commit -m "Update README"');await sandbox.gitCheckout('https://github.com/user/repo');
// Modify a file
const readme = await sandbox.readFile('/workspace/repo/README.md');
await sandbox.writeFile('/workspace/repo/README.md', readme.content + '\n\n## New Section');
// Commit changes
await sandbox.exec('cd repo && git config user.name "Sandbox Bot"');
await sandbox.exec('cd repo && git config user.email "[email protected]"');
await sandbox.exec('cd repo && git add README.md');
await sandbox.exec('cd repo && git commit -m "Update README"');Рекомендации
- Используйте неглубокие клоны - Быстрее для больших репозиториев с
depth: 1 - Безопасное хранение учетных данных - Используйте переменные окружения для токенов
- Очистка - Удаляйте неиспользуемые репозитории, чтобы сэкономить место
Устранение неполадок
Ошибка аутентификации
Проверьте, что токен задан:
if (!env.GITHUB_TOKEN) {
throw new Error("GITHUB_TOKEN not configured");
}
const repoUrl = `https://${env.GITHUB_TOKEN}@github.com/user/private-repo.git`;
await sandbox.gitCheckout(repoUrl);if (!env.GITHUB_TOKEN) {
throw new Error('GITHUB_TOKEN not configured');
}
const repoUrl = `https://${env.GITHUB_TOKEN}@github.com/user/private-repo.git`;
await sandbox.gitCheckout(repoUrl);Тайм-аут для больших репозиториев
Используйте неглубокое клонирование:
await sandbox.gitCheckout("https://github.com/user/large-repo", {
depth: 1,
});await sandbox.gitCheckout('https://github.com/user/large-repo', {
depth: 1
});Дополнительные материалы
- Справочник по Files API - Операции с файлами после клонирования
- Руководство по выполнению команд - Запуск команд git
- Руководство по управлению файлами - Работа с клонированными файлами