Git 我想以一种方式推送我的所有文件,以便以后可以在存储库中打开它们

Git 我想以一种方式推送我的所有文件,以便以后可以在存储库中打开它们,git,Git,我不知道发生了什么,Git开始告诉我,我在当前存储库中添加了另一个Git存储库。我不记得做过,我整天都在写代码和配置文件 所以它给了我这个警告:添加嵌入式git存储库:client 我试着做了git-rm--cached-client-f,git不在乎,警告仍然存在 所以我做了一个git添加。 当我推送项目时,我无法打开client/文件夹作为Github存储库上的链接 我删除了Github存储库 我回到了未为提交而进行的更改:modified:client(已修改的内容,未跟踪的内容),它也不

我不知道发生了什么,Git开始告诉我,我在当前存储库中添加了另一个Git存储库。我不记得做过,我整天都在写代码和配置文件

所以它给了我这个
警告:添加嵌入式git存储库:client

我试着做了
git-rm--cached-client-f
,git不在乎,警告仍然存在

所以我做了一个
git添加。

当我推送项目时,我无法打开
client/
文件夹作为Github存储库上的链接

我删除了Github存储库

我回到了未为提交而进行的更改:
modified:client(已修改的内容,未跟踪的内容)
,它也不允许我执行
git签出--client/

我基本上是想确保当我为这个项目创建一个repo并推送所有这些文件夹时,我能够单击这些文件夹并查看其中的文件

这是我的
Dockerfile.dev
client/
中:

FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "start"]
FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/build /usr/share/nginx/html
这是我的
Dockerfile
,用于
client/
内部的生产目的:

FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "start"]
FROM node:alpine
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/build /usr/share/nginx/html
我不相信上面的任何配置都可以在
客户机/
中创建
.git
文件夹

我查看了我的命令行历史记录,没有看到我在
client/
目录上运行了
git init

在这一点上,我该如何清理
git-rm——缓存的客户端
似乎不起作用,git-clean-f-d也不起作用

我回来了

changes not staged for commit:
    modified: client (modified content, untracked content)
这表示您现有的Git存储库正在将路径名
client
视为子模块。子模块只是对其他Git存储库的特定形式的引用

整个情况很快就会变得混乱,因为每个本地(例如,在笔记本电脑上)Git存储库通常都包含对另一个Git存储库的引用:位于托管提供商(如GitHub)上的一个。也就是说,如果我们画一个关系,我们会得到这样的结果:

+-----------------+                +-----------------+
|  your Git repo  |   --origin->   |   GitHub repo   |
|=================|                |=================|
|    commits      |                |     commits     |
|  (shared w/     |   <=========>  |                 |
|   origin)       |                |                 |
|-----------------|                |                 |
|   branch names  | (private)      |                 |
|-----------------|                |-----------------|
| remote-tracking |                |  branch names   |
| names: origin/* | <------------- |                 |
+-----------------+                +-----------------+
其中,
b789abc…
实际上是第三次回购中的提交。当然,第三次回购也可以有自己的
来源
,这将是图片中的第四个存储库。第四个存储库也可能位于GitHub、Bitbucket、GitLab或其他任何地方

要正确使用子模块,您自己的存储库(Git调用超级项目的存储库)必须包含一个名为
.gitmodules
的文件。这个文件列出了第四个Git存储库的URL,也就是我们没有在这里绘制的那个

在本例中,我们在您的存储库中显示了一个包含文件快照的提交,以及一个gitlink。该gitlink表示,对于名称
客户机
,使用该存储库的任何人都应该克隆子模块存储库,并告知Git to
Git checkout b789abc…
(通过其唯一的散列ID)

您要存储在
.gitmodules
中的URL使克隆您的GitHub存储库的任何人都可以克隆第四个存储库。在这之后,他们的本地(笔记本电脑)克隆可以使用散列ID(在本例中为
b789abc…
),该散列ID存储在您的笔记本电脑和GitHub超级项目存储库中共享的提交的gitlink条目中,以
git checkout
在他们的本地git存储库中通过克隆第四个git存储库生成的正确散列ID

(您可能需要多次阅读本节。它很复杂!)

如果你不想要一个子模块呢? 如果您根本不想要子模块:

  • 将另一个Git存储库完全移开:

    mv client /some/other/path
    
    (或用于移动所有内容的任何内容,包括
    .git
    文件夹)

  • 从您将所有这些内容移动到的位置复制所有文件,但不要复制
    .git
    目录/文件夹

  • (另一种可能更简单的方法是:将
    .git
    目录移出
    client/
    子目录,或者将其完全删除。)

    现在您有了以前使用过的普通文件,但您可以用普通方式添加普通文件,因为
    客户机/
    文件夹中没有
    .git
    文件夹。您的Git存储库不会试图通过所有这些子模块来控制其他Git存储库

    不幸的是,您必须在除去已创建的任何子模块后执行此操作。这很痛苦。一定要这样做。如果现有提交将
    客户机
    列为子模块,则无论何时使用这些现有提交,都必须非常小心,或者执行主要的历史记录重写操作,将所有这些提交替换为新的和改进的提交,而这些提交不将
    客户机
    用作子模块

    如果您没有提交任何引用此子模块的提交,并且没有
    .gitmodules
    文件,请参阅下面的最后一节

    如果您确实想要一个子模块,但只是想更新它呢? 这有点棘手,但其实没那么糟糕。记住:子模块是一个Git存储库。它应该在GitHub或其他任何子模块调用的
    origin
    上有一个对应项。子模块本身几乎不知道或者根本不知道它存在于超级项目之下:它只是一个普通的老Git存储库。唯一特别的是超级项目倾向于将
    cd
    放入子模块Git中,并告诉它
    Git checkout
    一次按hash ID提交,将其置于分离头模式

    因此:您自己输入子模块,并通过为当前提交创建一个新的分支名称,或签出一些现有的分支名称,使其脱离“分离头”模式。如果您有需要保存的更改,可以
    g
    
    cd ..     # or whatever to get to the superproject
    
    git add client
    
    git add client
    
    git rm --cached client