【问题标题】:Git Flow Release Finish - Permission deniedGit Flow Release Finish - 权限被拒绝
【发布时间】:2015-01-10 17:20:35
【问题描述】:

我使用 git flow 已经有一段时间了,现在是时候完成第一个版本 v1.0.0。为此,我正在 Windows 上使用 SourceTree。

当我想完成发布时,我收到了这个错误:

sh.exe C:\Users\xy\AppData\Local\Atlassian\SourceTree\gitflow_local\gitflow\git-flow release finish -f C:\Users\xy\AppData\Local\Temp\2ffrpxef.20z v1.0.0
Switched to branch 'master'

error: unable to create file component/admin/config.xml (Permission denied)

There were merge conflicts.

Completed with errors, see above.

我不知道为什么会发生此错误,因为在功能分支中工作时不应该出现任何文件权限问题。

在上述失败之后,我基本上在我的工作副本中完成了与 master 相关的所有更改。我只是简单地删除了所有这些更改并删除了新文件等等。不,不存在冲突。所以我再次准备好完成我的发布。

目前开发和发布处于同一阶段,当然还有很多在master之前提交:

如何在不遇到此问题的情况下完成我的发布?

有什么方法可以将当前的开发/发布阶段强加给 master 吗?基本上所有的开发提交都应该应用到主分支上——所以当它们出现时所有的合并冲突我想用开发分支版本来解决。这可能吗?

【问题讨论】:

    标签: git atlassian-sourcetree git-flow


    【解决方案1】:

    我找到了可以帮助我解决这个问题的人,他的想法与锁定文件的其他进程有关。

    为了验证这一点,我将我的存储库复制到其他地方,用 SourceTree 打开它,我能够毫无问题地完成发布。

    因此我猜这与文件被锁定有关。

    虽然我怀疑我的 IDE (PHPStorm),但当我关闭它时我无法查明它,然后仍然存在文件权限问题。 也许是 Dropbox(整个存储库都在里面),谁知道呢。但现在我至少知道了一种解决方法。

    【讨论】:

    • 有趣的分析。 +1
    • 受 OP 的启发,我重新启动了我的 Windows,它就可以工作了。有点奇怪。
    • 我在完成修补程序时遇到了同样的问题。事实证明 IDE 确实锁定了文件。保存文件后,一切正常,然后 Sourcetree 切换到 master 并且 IDE 注意到文件更改(到 master 中的旧版本)并锁定我猜。因此,对于某些人来说,仅关闭 IDE 可能也有效。
    • 我可以确认我的情况是因为 VSCode 是随项目一起打开的。
    【解决方案2】:

    issue 107 所示,该错误消息表示由于冲突而无法完成合并'参见git-flow-release#L225-L240):

      if ! git_is_branch_merged_into "$BRANCH" "$MASTER_BRANCH"; then
        git checkout "$MASTER_BRANCH" || \
          die "Could not check out $MASTER_BRANCH."
        git merge --no-ff "$BRANCH" || \
          die "There were merge conflicts."
    

    这意味着您需要resolve the merge conflictscomplete the merge first

    OP hbit 添加

    基本上所有的开发提交都应该应用到主分支上——所以当它们出现时所有的合并冲突我想用开发分支版本来解决。

    这是基于master 重新构建的develop 分支的典型:

    • rebase 意味着您在master 之上重放develop 分支,解决develop 分支中的任何冲突
    • 变基意味着一旦develop 分支位于master 之上(变基),与master 的合并(由git-flow release finish 完成)将是一个微不足道的快进分支。

    【讨论】:

    • 从我的屏幕上可以看到,所有feature/... 分支提交都进入了development 分支上的一个提交,该分支基于master 分支。所以我不确定我是否需要一个变基 - 我有点希望我处于 git-flow release finish 将是一个快进合并的阶段。你明白我的意思吗?
    【解决方案3】:

    我猜这个错误不仅可能发生在您修改了权限,而且如果您修改了该文件的所有权(这会导致权限更改)。

    我自己无法摆脱这个问题,所以我所做的(并为我工作)就像“把骨架藏在壁橱里”。目的是将有缺陷的文件隔离到一个测试分支中,然后您可以删除该分支。

    sudo rm badfile.xxx - 物理删除文件,确保您有一个副本以便稍后添加它

    git add —all badfile.xxx - 在舞台上标记为已删除

    git checkout -b some_local_branch_we_ll_never_use - 在提交之前创建一个新分支

    git commit -m "Delete the bad file" - 提交并删除新分支中的坏文件,工作目录应该是干净的

    git checkout my_good_old_branch - 回到你的工作分支并继续你的生活......

    然后您可以删除您的测试分支:

    git branch -D some_branch_we_ll_never_use

    git status

    【讨论】:

      猜你喜欢
      • 2016-10-30
      • 2020-07-30
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 2018-04-15
      • 2017-05-23
      • 2014-03-18
      相关资源
      最近更新 更多