mar*_*230 6 command-line ruby-on-rails gitlab
我正在尝试将ruby rails文件添加到gitlab中的存储库中,但是以某种方式不允许我添加该文件,说我的文件未提交检出。
我试过git pull,再次使文件和git添加,但仍然无法正常工作
错误:“ 172069 / 08_lab_routes_controllers_views_172069_172188-Copy / adventure_game /”没有签出是致命的:添加文件失败
Mar*_*tto 85
如果您有一个带有.git目录的子目录并尝试使用,git add .您将看到此消息。
如果您有一个 git 存储库,然后在该存储库下的子目录中创建/克隆另一个存储库,就会发生这种情况。
tor*_*rek 28
为了扩展Mario Zigliotto和Albert 的答案所接受的答案,发生这种情况的原因是因为子模块。这是重现问题的简单方法:
\n$ mkdir empty-submodule && cd empty-submodule\n$ git init\nInitialized empty Git repository in [path ending in empty-submodule/.git]\n$ mkdir sub && (cd sub && git init)\nInitialized empty Git repository in ... [path ending in empty-submodule/sub/.git]\n$ ls\nsub\n$ ls -a sub\n. .. .git\n$ git add .\nerror: \'sub/\' does not have a commit checked out\nfatal: adding files failed\nRun Code Online (Sandbox Code Playgroud)\n请注意,该子目录sub本身就是一个 Git 存储库,但在此子目录中不会签出任何提交。这是一个简单的事实陈述,在本例中是正确的,因为我创建了sub,进入其中,并在那里创建了一个新的空 Git 存储库。所以Git 存储库根本没有提交。
对于上述事实,我们再补充一点:没有一个 Git 存储库可以在其中容纳另一个 Git 存储库。 这样做的原因与安全性有关,但就我们的目的而言,这一事实的重要副作用是尝试将子存储库添加到存储库(如 中的超级项目empty-submodule)不会添加存储库本身。相反,它添加了对存储库中提交的引用。这就是子模块的实现方式。1 但要引用子模块内的某些提交,子模块本身必须签出某些提交。
解决这个问题的方法实际上取决于您想要的结果。有关此内容的更多信息,请参阅下一节。
\n1从技术上讲,子模块由两部分实现:
\ngit clone 上运行,外部存储库还应该包含一个.gitmodules文件。git clone该文件将包含告诉超级项目 Git 如何访问子模块的指令。一旦子模块存储库存在,超级项目 Git 就不再需要git clone在其上运行。因此,可能会意外或故意完全忽略该.gitmodules文件。这样做会产生一个难以使用的超级项目。我喜欢称其为半途而废的子模块。如果它被完全分配,超级项目将能够克隆子模块,但由于文件.gitmodules丢失,它不能。
有多种方法可以解决该问题。在选择一个之前,您应该知道是否想要有一个子模块。这里没有正确的答案,因为我应该使用子模块的问题有点像我应该选择哪种口味的冰淇淋:不同的人有不同的偏好。
\n如果您根本不需要子模块,则需要移动或删除.git相关子目录中的子目录,例如:
rm -rf sub/.git\nRun Code Online (Sandbox Code Playgroud)\n(如果在 Windows 上使用 PowerShell,另请参阅Nissan 的回答)。
\n在此之前,您应该:
\n确定是否要保留其他存储库。如果是这样,请勿将其删除!只需将其移到其他地方即可,例如mkdir ../keep && mv sub/.git ../keep。
git checkout确定在移动或删除存储库(目录)之前是否需要进行某些提交或分支.git。如果是这样,请进入子模块并检查所需的提交。
如果您确实想要一个 submodule,您可能需要在子模块内进行一些提交,或者检查一些现有的提交,就像上面的步骤 2 中那样。一旦子模块存储库正确提交,您就可以使用git add它。
以下是在名为 的子模块中创建提交的示例sub:
$ cd sub\n$ echo this is the submodule > README.md\n$ git add .\n$ git commit -m initial\n[master (root-commit) c834131] initial\n 1 file changed, 1 insertion(+)\n create mode 100644 README.md\n$ cd ..\nRun Code Online (Sandbox Code Playgroud)\n现在子模块已提交,我可以将其添加到超级项目中。不过这里有点麻烦,因为我还应该创建.gitmodule上面脚注 1 中提到的文件。该git submodule add命令会为您完成所有操作,但您需要知道该子模块存储库的位置git push。例如:
$ git submodule add ssh://git@github.com/place/where/submodule/lives.git sub\nAdding existing repo at \'sub\' to the index\nRun Code Online (Sandbox Code Playgroud)\n现在一切都已准备好在超级项目中提交:
\n$ git status\nOn branch master\n\nNo commits yet\n\nChanges to be committed:\n (use "git rm --cached <file>..." to unstage)\n new file: .gitmodules\n new file: sub\n\n$ cat .gitmodules\n[submodule "sub"]\n path = sub\n url = ssh://git@github.com/place/where/submodule/lives.git\nRun Code Online (Sandbox Code Playgroud)\n该子模块实际上尚未发送到 GitHub。在其他人能够使用超级项目之前,我必须创建此 GitHub 存储库,为其提供足够的(例如公共)访问权限,并将git push子模块提交到该 GitHub 存储库。然后我可以将git push我的超级项目提交到存储库应位于的任何位置。然后你\xe2\x80\x94通用的“你”\xe2\x80\x94可以是超级项目git clone,它现在有一个文件,其中包含你的Git可以运行的指令。.gitmodulesgit clone ssh://git@github.com/place/where/submodule/lives.git sub
子模块存在许多可用性问题,上述所有复杂性都是其中之一。确保您知道自己将面临什么。
\nHar*_*ron 10
我有同样的错误消息。我通过以下命令修复了它:
git add folder-name/* 代替git add .
我的文件夹目录如下:
Main-folder
-folder-one
-folder-two
Run Code Online (Sandbox Code Playgroud)
参考: https: //github.community/t/error-git-add/2937
小智 7
您不需要像第一个答案所暗示的那样从目录中删除整个文件,我只需要删除该.git目录,然后您git add .就可以工作了
发生这种情况的原因是@Mario Zigliotto 建议,在该存储库下的子目录中有另一个存储库。
小智 7
我遇到了同样的问题,这就是我发现的原因。
在其中一个子文件夹下,我初始化了 git,因此我有两个 .git 文件夹,一个位于父目录中,另一个位于子文件夹中
为了解决这个问题,我删除了子文件夹中的 git
cd project-directory/sub_folder_name
Run Code Online (Sandbox Code Playgroud)
检查是否有.git文件夹
ls -la
rm -rf .git
cd ..
git add .
git commit -m "commit message"
Run Code Online (Sandbox Code Playgroud)
小智 5
该文件夹有一个.git文件夹,由于该.git文件夹,所以导致错误。因此,只需删除该文件夹,然后重试即可。它将发挥作用。
注意:这是一个隐藏文件夹,因此只需在Windows设置中选择隐藏项目即可
| 归档时间: |
|
| 查看次数: |
4038 次 |
| 最近记录: |