【发布时间】:2021-10-18 23:14:36
【问题描述】:
我正在与一位朋友合作开展一个项目。我们有两种不同的文件结构,但我们共享相同的几个文件,如下所示:
我:
Root ->
Folder_A ->
File 1a
File 2a
Folder B ->
File 1b
File 2b
他:
Root ->
Folder_A ->
File 1a
File 2a
File 3a
Folder B (Called something else) ->
File 1b
File 2b
Folder C ->
File 1c
最终的存储库应该只包含:
Root ->
Folder A->
File 1a
Folder B->
File 2b
在本例中,我们只需要共享文件夹 1a 和 2b。每个文件都已分别在我们的本地系统上创建。 你可以看到他还有其他不能动的文件,比如文件夹C和文件1c。
我如何设置一个只捕获我们需要的这几个文件而忽略我们两个系统上的所有其他文件的存储库?
我知道.gitignore,问题是我们的两个目录都已经非空了。我不知道如何只同步我们需要的文件而忽略这些目录中的所有其他内容。由于他的文件夹被称为不同的名称,因此这变得更加困难。
谢谢!
【问题讨论】:
-
“我们的目录已经非空”是什么意思?我认为使用
.gitignore没有任何问题。您可以删除缓存文件并提交更改。 -
Git 本身存储——在提交中——only 文件;这些文件的名称至少对您的操作系统意味着应该有一些文件夹。也就是说,Git 可能会存储一个名为
path/to/file的文件。这不是一个文件夹path保存一个文件夹to保存一个名为file的文件,它是一个名称为path/to/file的文件,并带有嵌入的正斜杠。请务必记住,Git 提交中的内容不是您在计算机文件夹中存储的文件中看到和编辑的内容。这些文件夹中的文件正是您让 Git 创建 Git 版本的方式。 -
因此,如果你想让 Git 在下一次提交中存储一个名为
Folder_A/file 1a的文件,你可以运行git add "Folder_A/file 1a"(这里的引号通常是必要的,以保护名称,不能很好地与类 Unix 系统配合使用)。这使 Git 在您的操作系统上查找该路径名(将它们视为文件夹和文件),然后在 Git 的 index aka staging area 中创建或更新文件名称带有嵌入的正斜杠。 -
您的下一个
git commit获取 Git 索引(暂存区)中的所有文件,并从中进行提交。 index/staging-area 实际上是 Git 不能存储空文件夹的原因:索引格式没有办法做到这一点。 (有些东西非常接近,但如果你尝试以这种方式使用它,Git 会时不时地破坏它。)
标签: git github git-bash collaboration