我已經開始開發一個網站,保存在我的本地檔案夾中,我正在嘗試將它保存到 GitLab 存盤庫中。我在 GitLab 上創建了一個新存盤庫,然后執行了以下操作:
cd existing_folder
git init --initial-branch=main
git remote add origin https://gitlab.com/...
git add .
git commit -m "Initial commit"
git push -u origin main
該專案包含兩個檔案夾,Server 和 Client,Client 是一個 React App。但是,客戶端檔案夾顯示為無法打開的紅色檔案夾圖示:

當我單擊初始提交時,它說客戶端已添加為子專案提交:

我不知道這是什么意思,我之前也建過類似結構的網站,Gitlab 沒有這樣做過。我只想將 Client 和 Server 檔案夾的內容保存在 repo 中。
uj5u.com熱心網友回復:
你做了什么:
創建了一個Git 存盤庫來保存應用程式的客戶端,并向其中提交了一些東西。此存盤庫位于
client/.git/. 它包含可能被命名為諸如此類main.js的檔案(或main.ts諸如此類,如果是 TypeScript 等)。在 中創建
.git了第二個包羅萬象的 Git 存盤庫,用于保存應用程式的服務器端,并將內容提交給該存盤庫。此存盤庫駐留在.git/并包含命名的檔案server/functions.js等。Git 將把這第二個總體存盤庫稱為superproject。它只是一個 Git 存盤庫,盡管它具有一個特殊屬性。
請注意,就 Git 而言,檔案夾甚至不存在:檔案中只有帶有嵌入斜杠的名稱——總是正斜杠,從不反斜杠——在其中。Git 將根據需要將這些轉換為您的作業系統所需的檔案夾和檔案排列。這也處理了作業系統需要的任何反斜杠(例如,在 Windows 上將名稱從 轉換為 )foo/bar.js。foo\bar.js但在大多數情況下,這是不可見的,我們可以假裝我們有一個裝滿檔案的檔案夾;無論如何,我們將使用從提交中提取的作業系統級檔案,這些檔案實際上是檔案夾中的檔案。因此,對于剩下的內容,我們將假裝我們確實有檔案夾。
無論如何,出于良好(安全)目的,Git拒絕存盤任何名為.git. 因此,client/.git/* 實際上無法存盤中的所有檔案:您不能將子存盤庫client放入 中的超級專案中.,即使./.git保留server/并且所有這些檔案都很好。
相反,Git 將向超級專案添加 Git 稱為gitlink 的東西。 這是一個條目,上面寫著:克隆并簽出超級專案的提交后,也克隆另一個 Git 存盤庫。在那個新的、額外的 Git 存盤庫中,我保存了您應該在該子專案中簽出的提交的原始哈希 ID。
這就是您看到該說明的原因:
Subproject commit 327f06...88c
這就是讓這個超級專案 Git 存盤庫成為超級專案的原因:它包含一個名為的gitlinkclient,而 gitlink 本身——否則就像一個檔案——說327f06...88c. 該327f06...88c哈希 ID 是 Git 存盤庫中提交的哈希 ID,Git 應該克隆并放入client超級專案內的檔案夾中。
現在,這里的訣竅是讓 Git 運行:
git clone <url> client && (cd client && git checkout 327f06...88c)
Git 需要知道url在這個命令列上使用的。gitlink 只記錄提交哈希 ID 和路徑名client。URL 進入一個單獨的檔案,正如chickahoona 提到的,名為.gitmodules.
問題是,當你跑的時候:
git add .
這不會為您創建.gitmodules檔案。要創建該檔案,您必須使用git submodule add而不是git add. 該命令采用與本例中的名稱git submodule add相同型別的引數,但也采用 URL,它將以Git 稍后運行命令所需的形式添加到檔案中。git addclient.gitmodulesgit clone
您不必在計算機git clone上運行此命令,因為您已經在. 因此,僅完成一半作業這一事實不會影響您對這個超級專案/gitlink 配對的使用。但這意味著沒有其他人可以使用您的超級專案,因為缺少克隆指令。 client/.gitgit add .
不清楚的是,您個人是否希望將服務器和客戶端存盤在兩個單獨的 Git 存盤庫中(一個是超級專案,一個是子模塊),或者您是否希望將其存盤在三個Git 存盤庫中:
- 一個僅用于服務器,
- 一個僅供客戶使用,并且
- 一個系結他們。1
最后一個將是設定中唯一的超級專案,僅包含兩個 gitlink 和一個.gitmodules參考兩個子模塊的檔案。服務器的檔案將存盤在 Git 存盤庫中server/.git,客戶端的檔案將存盤在 Git 存盤庫中client/.git(就像現在一樣)。
或者,也許您根本不想要任何子模塊。在這種情況下,您需要洗掉該client/.git檔案夾(或將其移至其他位置)。這將破壞(或移動到其他地方)包含客戶端的整個存盤庫。但是,您將保留該存盤庫中的所有作業樹檔案。現在內部存盤庫已經消失,這些作業樹檔案可以被編輯git add到超級專案中。這些檔案將命名為 like ,Git 將創建一個檔案夾并將它們提取到該檔案夾中命名為等的檔案中。client/main.jsclient/main.jsclient/
只有你可以決定你想在這里做什么。 決定然后繼續:要么使用 正確添加子模塊git submodule add,要么將服務器也變成一個子模塊并添加它,或者洗掉(或移動)客戶端 Git存盤庫,但不洗掉客戶端檔案的當前版本。
1三個戒指給天空下的精靈國王,
七個給矮人領主在他們的石頭大廳里......
uj5u.com熱心網友回復:
我的猜測是您在錯誤的檔案夾中執行 git init 。現在您的客戶端檔案夾可能是實際頂級 git 存盤庫的子模塊。
檢查您的客戶端檔案夾中是否有隱藏的 .git 目錄
要解決此問題,請洗掉 Client 目錄中的 .git 檔案夾。還要檢查頂部檔案夾中名為.gitmodules的檔案,如果存在則將其洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/414061.html
標籤:
