【问题标题】:set upstream branch tracking after moving and re-adding remote URL in simple-git在 simple-git 中移动和重新添加远程 URL 后设置上游分支跟踪
【发布时间】:2020-03-04 23:15:38
【问题描述】:

以下代码检查本地存储库是否存在,并使用simple-git 从远程存储库同步更改。我在JWT 令牌在 24 小时后过期时遇到了一些问题,通过删除并重新添加远程存储库 URL 解决了这个问题。

if (fs.existsSync(cachePath)) {
      debug(`Local Path ${cachePath} Exists`);
      // debug('Checking `git status` on local repo');
      // Fetch
      // FIXME: no upstream branch is set -> no tracking information for the current branch
      // await git(cachePath).removeRemote('origin');
      // await git(cachePath).addRemote('origin', gitURL);
      // go into file and replace tocken
      // FIXME: fatal branch 'master' doesn't exist
      // execSync('git branch --set-upstream-to=origin/master master');
      // await git(cachePath).branch(['--set-upstream-to=origin/master', 'master'], (err, data) => {
      //   if (err) throw new Error(err);
      // });

      // Show all branches
      // debug('SHOW ALL BRANCHES');
      // await git(cachePath).branch(['-a'], (err, data) => {
      //   if (err) throw new Error(err);
      // });

      /* CMDs
      -------------------------------------------------- */
      try {
        execSync(`cd ${cachePath}`, { stdio: 'inherit' });
        execSync('git remote -v', { stdio: 'inherit' });
        execSync('git remote remove origin', { stdio: 'inherit' });
        execSync(`git remote add origin ${gitURL}`, { stdio: 'inherit' });
        execSync('git remote -v', { stdio: 'inherit' });
        // execSync('git branch --set-upstream-to=origin/master master', { stdio: 'inherit' });
        git(cachePath).branch(['-u', 'origin/master'], (err, data) => {
          if (err) throw new Error(err);
          console.log(data);
        });
        execSync('cd /home/ystanev/menlolab/runner', { stdio: 'inherit' });
      } catch (e) {
        throw new Error(e);
      }
      /* End of CMDs
      -------------------------------------------------- */

      debug('GIT PULL');
      await git(cachePath)
        .outputHandler(outputHandler)
        .pull();

之前的操作似乎取消了上游分支跟踪,让我无法git fetch/pull。根据我通过执行git branch --set-upstream-to=origin/master master 设置跟踪的 git 输出,问题似乎已解决。

我尝试通过bash 命令完成整个操作,但一直收到错误消息:

error: the requested upstream branch 'origin/master' does not exist

与远程仓库的通信似乎有问题,因为相同的命令在本地仓库的bash shell 中运行得很好。

关于可能的原因有什么建议吗?

【问题讨论】:

  • <upstream> 参数在您执行时必须存在于--set-upstream-to=<upstream>。因此,添加名称origin 后,您需要先运行git fetch origin,以便创建所有origin/* 名称,然后执行git branch --set-upstream-to 步骤。
  • @torek 谢谢,这解决了我的问题。

标签: node.js git npm git-branch


【解决方案1】:

正如@torek 在 cmets 中提到的,我必须在设置上游之前运行git fetch

最终代码如下:

if (fs.existsSync(cachePath)) {
      debug(`Local Path ${cachePath} Exists`);

      // Fetch
      await git(cachePath).removeRemote('origin');
      await git(cachePath).addRemote('origin', gitURL);
      await git(cachePath).fetch('origin');
      await git(cachePath).branch(['-u', 'origin/master']);

      debug('GIT PULL');
      await git(cachePath)
        .outputHandler(outputHandler)
        .pull();
    }

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 2023-01-14
    • 2014-02-04
    • 2021-07-10
    • 2011-11-26
    • 2020-01-06
    • 2020-09-26
    • 2016-02-20
    相关资源
    最近更新 更多