Skip to content

branchExists をリモートブランチにも対応させる(別PCでの作業継続) #398

@nrslib

Description

@nrslib

概要

別PCで作業の続きをしたいケースで、リモートにしかブランチが存在しない場合、現在の実装では branchExists がローカルブランチしかチェックしないため、既存ブランチが無視されて main から新規ブランチが作成されてしまう。

現状の動作

createSharedClone 内の branchExistsgit rev-parse --verify <branch> でローカルブランチのみ確認している。

  • ローカルにブランチあり → ✅ そのブランチでクローン
  • リモートにのみあり → ❌ main から新規ブランチ作成(リモートの内容が引き継がれない)
  • どこにもなし → 新規ブランチ作成

期待する動作

3段階でブランチを解決する:

  1. ローカルにブランチあり → そのブランチでクローン
  2. リモート(origin)にあり → そのブランチでクローン(git clone --branch がリモート名も解決可能)
  3. どこにもなし → ベースブランチからクローン → 新規ブランチ作成

実装方針

branchExists を拡張し、origin/<branch> もチェックする:

private static branchExists(projectDir: string, branch: string): boolean {
  // ローカルブランチ
  try {
    execFileSync('git', ['rev-parse', '--verify', branch], { cwd: projectDir, stdio: 'pipe' });
    return true;
  } catch {}
  // リモート追跡ブランチ
  try {
    execFileSync('git', ['rev-parse', '--verify', \`origin/${branch}\`], { cwd: projectDir, stdio: 'pipe' });
    return true;
  } catch {}
  return false;
}

cloneAndIsolategit clone --branch を使っており、リモートブランチ名でも解決してくれるため変更不要。

ユースケース

  • PC-A で takt がブランチを push 済み
  • PC-B で同じブランチ名を指定して takt addtakt run
  • リモートから既存ブランチが取得され、続きから作業できる

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions