git checkout错误:无法创建目录:权限被拒绝(Bitbucket)

时间:2016-09-23 00:11:31

标签: github bitbucket git-checkout

我正面临着git checkout命令的问题。请帮忙。

这就是我所做的。

  1. 创建了一个本地目录。创建了一些文件。在本地发起了一个git repo。
  2. 在bitbucket&创建了一个回购把我当地的回购推到了bitbucket
  3. 在本地创建了一个新分支,b01
  4. 向b01添加了新文件,提交了它们并成功将分支推送到了bitbucket
  5. 现在我正在尝试将b01与master合并,这就是我遇到问题的地方。我无法结账。
  6. 使用的命令列表和错误详细信息:

    git clone [my repo]
    git checkout -b b01
    

    此后我进行了多项更改,包括创建新文件和目录,提交了这些更改并成功将该分支上的更改推送到了repo。像:

    git push -u origin b01
    

    现在我已完成更改并希望将其合并到主分支。所以我做了一个:

    git checkout master
    

    这是它抛出的错误:

    fatal: cannot create directory at 'workfolder': Permission denied
    

    Git让我进入b01,但删除了我在分支中创建的所有文件。 所以,如果我现在做一个

    git status
    
    它告诉我:

    On branch b01
    Your branch is upto date with 'orgin/b01'
    Changes not staged for commit:
    (use "git add/rm .....)
      deleted: new file1
      deleted: new file2
    <list of the new files I had added but which got deleted as a result of the command>
    

    我必须运行

    git checkout -- . 
    

    恢复文件。

    请帮忙。

7 个答案:

答案 0 :(得分:18)

我有类似的情况。虽然这是由于我在视觉工作室开放解决方案。关闭视觉工作室并进行git重置 - 硬(只有你不担心失去工作)才能让我进入一个好位置。

即。检查是否有任何进程锁定文件夹/文件。

答案 1 :(得分:4)

正如已经说过的那样,当另一个进程已经在访问文件时,可能会发生这些情况,因此关闭任何可能正在使用它的应用程序都会有所帮助,就我而言,打开Visual Code并关闭它确实有帮助。

答案 2 :(得分:2)

我知道这个问题有点老了,但是由于最高答案建议使用-hard 标志,这可能不是必需的,所以我决定将其发布。

可能的问题原因:其他一些过程正在使用/锁定您要删除的文件/文件夹

解决方案::停止此过程,然后重试。找到它的一种方法是通过资源监视器(我从here中学到的方法):

  1. 打开任务管理器
  2. 导航至“ 性能”标签
  3. 点击底部的打开资源监控器
  4. 导航到 CPU 标签
  5. Associated Handles 部分,有一个搜索字段-输入您要获取“权限被拒绝”错误的目录/文件的路径
  6. (查看并)停止显示为搜索结果的任何进程。

答案 3 :(得分:1)

首先,在使用git的每个操作之间,我建议快速git status。我不能告诉你这多少次让我感到很头疼。

我可能试图解决一些问题:

  1. 您说您创建了目录并对b01进行了大量更改,然后将其推送到原点。看看这个动作`git show的提交。您是否更改了“workfolder”的父目录的权限? This might be of help

  2. 你在窗户上吗?如果是,您的目录路径有多深?路径长度是否超过windows max? Reference here

  3. 如果这些都不起作用,您是否尝试过从b01创建一次性分支,并合并“master”?这有时会引发一个原因。

  4. 丑陋的冰雹玛丽。您是否尝试在存储库外部复制/粘贴“b01”,回滚到匹配的“master”的最后一次提交,然后将“b01”副本中的更改粘贴到主服务器上?当事情完全颠倒并且没有意义时,有时候通过问题倒退就可以更容易地找出问题并了解将来不该做的事情。

答案 4 :(得分:0)

就我而言,我只是使用提交哈希而不是分支名称签出了有问题的提交。

答案 5 :(得分:0)

304/5000 答案很简单。假设您想与主管理员合并分支,可以执行以下操作:

git checkout -b master-2 // from your current branch where all the changes are
git branch -D master
git branch -m master-2 master
git push origin master

准备好了!请记住,以防万一您想覆盖分支中的所有内容

答案 6 :(得分:0)

只需更改权限以允许此“工作文件夹”的一个或组用户

sudo chmod u+w <exact_workedfolder_permission_denied>