[英]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.