5

我刚开始使用Git,我有一个问题:

当我创建一个新存储库时,我会得到一个文件夹,我应该在其中放置所有文件(该文件夹包含.git文件夹)。这个文件夹是完全独立的吗?

假设我创建了一个新的存储库并在该项目上工作了一段时间(进行提交)。如果我将那个文件夹移动到另一个位置(比如另一个磁盘)它仍然可以工作吗?如果我把它移到另一台电脑上怎么办?我可以在外部设备(外部 HDD 或 USB 记忆棒)上拥有存储库/文件夹并在多台计算机上使用它吗?

4

6 回答 6

7

是的。那是本地存储库,它包含有关存储库的所有信息。

唯一不包括在内的是全局配置。

有关更多详细信息,请参阅此免费 Git 文档。从那里引用:

Git 创建 .git 目录,该目录几乎是 Git 存储和操作的所有内容所在的位置。如果您想备份或克隆您的存储库,将这个单一目录复制到其他地方几乎可以满足您的一切需求。

于 2013-01-06T10:56:32.260 回答
2

文件夹本身是独立的。

实际上,如果您已经提交了所有内容并且没有本地更改,那么.git文件夹本身就足够了。该.git文件夹是您的存储库。该文件夹的其余内容是签出的工作目录。您不能将这些(特别是如果有很多文件)复制到其他机器上。

于 2013-01-06T11:00:06.973 回答
1

是的,它包含了 git 需要的一切。

它确实适用于 USB 棒。

于 2013-01-06T10:55:53.303 回答
1

是的,该文件夹是自包含的,但是如果您想从另一台机器上对其进行 git 操作,则需要安装 git

于 2013-01-06T10:56:15.040 回答
1

几乎。

  • Serge已经提到global config
  • 出于明显的安全原因, hooks不是 repo 的一部分(它们不被 a pushorclone或 a复制bundle),即使它们存储在.git文件夹中。
    在您的情况下(.git目录的重复),在本地机器上工作的钩子可能无法在另一台机器上工作(例如,因为它是一个perl脚本,并且perl没有安装在另一台机器上)。
  • 子模块引用外部存储库(一旦您将 git 存储库复制到另一台机器上,可能无法访问)
  • git 属性可以引用仅存储在一台机器上的脚本,而不能在另一台机器上访问。
  • git 远程地址(存储在本地配置中)可以引用在您将存储库复制到其他位置后不再可访问的存储库。

Git 会将移动的 repo 识别为 git repo,因此您可以说它在这方面是自包含的。
我更喜欢将我的 repo 移动为一个git bundle(只移动一个文件)。

但是,如果您依赖任何其他(脚本/工具/其他存储库)来完成您的存储库并且实际上允许您使用它,那么您可能还需要考虑移动其他外部元素。

于 2013-01-06T12:58:27.653 回答
0

Git 文件夹可能包含在内,但并不总是如此。

例如,今天我努力尝试将恢复的 .git 文件夹和文件复制到新的 Virtual Box 系统,因为存储在 Virtual Box/Lubuntu 内部的外部 USB 驱动器上的 repo 的硬盘损坏在正确关闭之前意外断开(使用 chkdsk / 修复f /x) 。

据我所知,所有文件看起来都完好无损,并且 git log 看起来很正常,除了标题是红色的。但是所有推送到新创建的远程仓库的尝试都遇到了各种错误,例如各种提交 # 的“无法遍历父级”和“你确定你有权限吗?” 此外,当文件最初从我恢复的驱动器复制到新创建的 VM 时,还有一些关于“符号链接”的消息。我认为这可能是权限问题,但所有文件都是读/写的。也许 .git 有内部检查?最终结果我只是通过删除 .git 并初始化本地存储库(基本上是硬重置)成功地推送到远程......所有历史记录都丢失了(只是一个类项目,所以之前只是本地的,现在 Bitbucket 将防止我希望再次发生。
但我想。

于 2017-08-21T06:43:20.447 回答