![](/img/trans.png)
[英]I am getting fatal message i.e not a git repository, when I am typing “git add .” in git command prompt.
[英]How to fix: error: '<filename>' does not have a commit checked out fatal: adding files failed when inputting "git add ." in command prompt
我正在尝试将一个 ruby rails 文件添加到我在 gitlab 中的存储库中,但它以某种方式不允许我添加文件,说我的文件没有提交检出。
我试过 git pull,再次制作文件并添加 git 但仍然无法正常工作
error: '172069/08_lab_routes_controllers_views_172069_172188-Copy/adventure_game/' does not have a commit checked out
fatal: adding files failed
如果您有一个带有.git
目录的子目录并尝试git add .
你会看到这条消息。
如果您有一个 git 存储库,然后在该存储库下的子目录中创建/克隆另一个存储库,就会发生这种情况。
我有同样的错误消息。 我通过从我的目录中删除导致错误的文件来修复它。
我希望这会有所帮助 =)
你不需要像第一个答案所暗示的那样从目录中删除整个文件,我只需要删除.git
目录,然后你的git add .
将工作
发生这种情况的原因是@Mario Zigliotto 建议的,该存储库下的子目录中有另一个存储库。
我有同样的错误信息。 我通过以下命令修复了它:
git add folder-name/*
而不是git add .
我的文件夹目录如下:
Main-folder
-folder-one
-folder-two
为了扩展Mario Zigliotto和Albert's answer的已接受答案,发生这种情况的原因是submodules 。 这是重新创建问题的简单方法:
$ mkdir empty-submodule && cd empty-submodule
$ git init
Initialized empty Git repository in [path ending in empty-submodule/.git]
$ mkdir sub && (cd sub && git init)
Initialized empty Git repository in ... [path ending in empty-submodule/sub/.git]
$ ls
sub
$ ls -a sub
. .. .git
$ git add .
error: 'sub/' does not have a commit checked out
fatal: adding files failed
请注意,子目录sub
本身就是一个 Git 存储库,但在此子目录中未检出任何提交。 这是一个简单的事实陈述,在这种情况下是正确的,因为我创建了sub
,进入了它,并在那里创建了一个新的空 Git 存储库。 这样Git仓库已经完全没有提交。
对于上述事实,我们再添加一个:任何 Git 存储库都不能在其中容纳另一个 Git 存储库。 这样做的原因与安全有关,但就我们的目的而言,这一事实的重要副作用是尝试将子存储库添加到存储库(如empty-submodule
的超级项目)不会添加存储库本身。 相反,它添加了对存储库中提交的引用。 这就是子模块的实现方式。 1但要参考一些子模块内提交,该子模块本身已经具备一定的承诺签出。
解决此问题的方法实际上取决于您想要的结果。 有关这方面的更多信息,请参阅下一节。
1从技术上讲,子模块由两部分实现:
git clone
,外部存储库还应该包含一个.gitmodules
文件。 这个文件将包含告诉超级项目 Git 如何git clone
子模块的指令。 一旦子模块存储库存在,超级项目 Git 就不再需要在其上运行git clone
。 因此,可能会意外或故意完全省略.gitmodules
文件。 这样做会产生一个难以使用的超级项目。 我喜欢称其为半途而废的子模块。 如果它是完整的,超级项目将能够克隆子模块,但由于.gitmodules
文件丢失,它不能。
有多种方法可以解决问题。 在你选择一个之前,你应该知道你是否想要一个子模块。 这里没有一个正确的答案,因为我应该使用子模块的问题有点像我应该选择哪种口味的冰淇淋:不同的人有不同的偏好。
如果您根本不需要子模块,则需要移动或删除相关子目录中的.git
子目录,例如:
rm -rf sub/.git
(如果在 Windows 上使用 PowerShell,另见Nissan 的回答)。
在你这样做之前,你应该:
确定是否要保留其他存储库。 如果是这样,请不要删除它! 只需将它移动到其他地方,例如, mkdir ../keep && mv sub/.git ../keep
。
在移动或删除存储库( .git
目录)之前,确定您是否需要git checkout
某些提交或分支。 如果是这样,请进入子模块并检查所需的提交。
如果你确实想要一个子模块,你可能需要在子模块中进行一些提交,或者检查一些现有的提交,就像上面的第 2 步一样。 一旦子模块存储库正确提交,您就可以git add
它。
这是在名为sub
模块中创建提交的示例:
$ cd sub
$ echo this is the submodule > README.md
$ git add .
$ git commit -m initial
[master (root-commit) c834131] initial
1 file changed, 1 insertion(+)
create mode 100644 README.md
$ cd ..
现在子模块有一个提交,我可以将它添加到超级项目中。 不过这里有一些问题,因为我还应该创建上面脚注 1 中提到的.gitmodule
文件。 git submodule add
命令为您完成所有工作,但您需要知道将git push
这个子模块存储库的位置。 例如:
$ git submodule add ssh://git@github.com/place/where/submodule/lives.git sub
Adding existing repo at 'sub' to the index
现在一切准备就绪,可以在超级项目中提交:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitmodules
new file: sub
$ cat .gitmodules
[submodule "sub"]
path = sub
url = ssh://git@github.com/place/where/submodule/lives.git
子模块实际上还没有发送到 GitHub。 在其他人能够使用superproject 之前,我必须创建这个 GitHub 存储库,为其提供足够的(例如,公共)访问权限,并将子模块提交git push
到该 GitHub 存储库。 然后,我可以git push
我在我的上层项目承诺的任何位置该存储库应该住在。 然后你——一般的“你”——可以git clone
superproject ,它现在有一个.gitmodules
文件,其中包含你的 Git 将能够运行git clone ssh://git@github.com/place/where/submodule/lives.git sub
。
子模块有一堆可用性问题,上述所有复杂情况都是其中之一。 确保你知道你在做什么。
注意:我假设您遇到了不同的问题,但我有相同的错误消息,这是第一个 Google 结果,因此发布我的情况、问题和解决方案可能对其他人有所帮助。
我有一个带有 Git 子模块的仓库。
错误由git commit .
发生git commit .
:
error: 'xyz' does not have a commit checked out
fatal: updating files failed
然后我做了git submodule init
,它打印了:
Submodule 'xyz' (git@github.com:albertz/...) registered for path 'xyz'
...
然后git submodule update
:
Cloning into '.../xyz'...
...
Submodule path 'xyz': checked out '...'
...
这修复了错误。 现在git commit .
运行良好。
我有同样的问题,这就是我发现的原因。
在其中一个子文件夹下我初始化了 git 所以我有两个.git 文件夹,一个在父目录中,另一个在子文件夹中
为了解决这个问题,我删除了子文件夹中的 git
cd project-directory/sub_folder_name
检查是否有.git文件夹
ls -la
rm -rf .git
cd ..
git add .
git commit -m "commit message"
尝试使用“git add”添加多个文件时,我遇到了相同的错误消息。 我能够一个一个地添加所有这些文件,而不是同时添加所有文件。
要添加到Mario 的(正确)答案并解决此类非常常见的问题(例如,在存储库顶部文件夹中使用应用程序生成器搭建应用程序的脚手架,并生成自己的.git
文件),您可以运行以下命令清理并将文件正确签入到 git。
cd {{appname}}
rm -rf .git
# rm -r -fo .git # if on Windows powershell
cd ..
git add .
我的解决方案最终使用:
git mergetool
这带来了一个界面,我可以在其中标记子模块应该在本地还是远程使用。
Submodule merge conflict for 'abc':
{local}: submodule commit (hash)
{remote}: submodule commit (hash)
Use (l)ocal or (r)emote, or (a)bort?
我尝试了所有这些解决方案,但没有一个对我有用。 但以下完全解决了我的问题。
git rm -r --cached .
如果要添加不同的 repo,可以使用上述解决方案
git remote set-url origin git@gitlab.com:username/project.git
如果某些嵌套文件夹中已经有一个.git
目录,在大多数情况下是 git 作为错误抛出的 < filename
>,则会出现此问题。
如果已经存在.git
目录并且您再次在某个父目录中使用git init
,那么会出现一些奇怪的情况,即.git
尝试跟踪另一个.git
目录。
要解决此问题,请移至该目录,然后使用rm -rf .git
。 这将删除嵌套文件夹中的.git
目录,然后您可以使用git add --all
或任何其他命令。
注意:删除.git
将删除该文件夹的所有本地跟踪信息,例如本地提交或分支。
在我的情况下,我只是不允许在分支内推送,所以我不得不创建另一个并发出拉取请求
该文件夹有一个.git
文件夹,由于.git
文件夹📁,它会导致错误。 所以只需删除该文件夹,然后再试一次。 它将起作用。
注意:这是一个隐藏文件夹,所以只需在windows设置中选择隐藏项目
如果您同时拥有后端和前端文件夹,请导航到这些文件夹并在两个目录上运行此命令
$ rm -rf .git
然后导航回您的主目录
今天我也陷入了这个问题,设法用这个解决方案解决了这个问题:
git rm -r --cached .
之后,您可以添加不同的 Github 回购
git remote set-url origin git@gitlab.com:.../thisIsYourProject.git
希望这会有所帮助,快乐的编码!
只需导航到那个 suddir 并执行 git add。 并且还运行 git commit 并进行推送。 之后导航回您的根目录并执行 git add。 again.That 解决了我的问题
使用git add folderName/
而不是git add folderName
我正在尝试将ruby rails文件添加到我在gitlab中的存储库中,但是以某种方式不允许我添加该文件,说我的文件没有提交签出。
我试过git pull,再次制作文件并git添加,但仍然无法正常工作
error: '172069/08_lab_routes_controllers_views_172069_172188-Copy/adventure_game/' does not have a commit checked out
fatal: adding files failed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.