git-subtree pull complications

后端 未结 4 1558
深忆病人
深忆病人 2020-12-14 16:49

We have been trying to get git-subtree working on a project (with git version 1.7.9.4) and have run into a bit of a complication. Someone else previous added the subtree wit

相关标签:
4条回答
  • 2020-12-14 17:15

    This also happens, if the current clone is a partial clone (e.g., when using --depth=1). This is the default at GitHub Actions V2.

    In the case of GitHub actions, this can be configured when using fetch-depth: 0 at the checkout step:

    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source
            uses: actions/checkout@v2
            with:
              ref: master
              fetch-depth: 0
    
    0 讨论(0)
  • 2020-12-14 17:15

    This could happen when the main repository and the subtree repository has different set of commits.

    In my case I had updated the subtree from the local repository(using git subtree pull --squash -P foo local/foo.git master) and the local repository changes were never pushed to origin.

    When I tried git pull --squash -s subtree git@example.com:foo.git master after this, I started getting the error.

    Just pushing the subtree repository solved the error.

    0 讨论(0)
  • 2020-12-14 17:22

    I had the same problem, and in my case it seems to be due to the initial subtree commit being merge-squashed into the master branch.

    Looking through the subtree source I found this: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L224

    It looks like subtree greps your git log for git-subtree-dir: foo but doesn't find a suitable commit. Try git log --grep="git-subtree-dir: foo/*\$", and if there's something weird with that commit, such as it being a merge commit, that could be the issue.

    Just pulling without squashing worked for me, apart from the annoying merge conflicts. I did that in a temporary branch which I then git merge --squashed into another branch to avoid a messier history. It could've been rebased instead too of course.

    0 讨论(0)
  • 2020-12-14 17:22

    I've been experiencing the same error Can't squash-merge: 'foo' was never added. with sourcetree 1.7.0 whenever I do a pull on a subtree. However, I believe my case is different because I'm using subdirectories.

    Sourcetree does something as follows:
    git -c diff.mnemonicprefix=false -c core.quotepath=false subtree pull -P dir1\subdir1 --squash remote-repo master

    And obviously, if we were to try it again in Git Bash (Git version 2.6.1.windows.1), it would be:
    git subtree pull -P "dir1\subdir1" --squash remote-repo master

    However that failed. The following also failed although the command syntax is fine:
    git subtree pull -P dir1/subdir1 --squash remote-repo master

    The solution I found to make it work is to use Git Bash with the following command:
    git subtree pull -P "dir1/subdir" --squash remote-repo master

    I guess that there is still some work to be done for Git's command-line processing engine.

    0 讨论(0)
提交回复
热议问题