Dav*_*den 10 filesystems git version-control
我问这个是因为网络搜索这个问题没有得到很好的答案.这是一个基本问题,也许是基本的问题,它是无知的,但我不知道答案.所以,稍微扩展一下:可以在受版本控制的文件夹中创建git存储库,还是应该将存储库放在该文件夹之外?或者是否可能?存储库位置是否重要?
Mar*_*air 16
在这一点上添加第六个答案可能有点徒劳,但是我为这个教程写了类似的东西,我认为这个问题的答案清楚地解释了裸机和非裸机库的标准布局是很重要的.
通常使用git,您将使用非裸存储库或具有工作树的存储库.默认情况下,包含.git目录的目录将位于该存储库的工作树的顶级.例如,如果您在名为的目录中创建了这样的存储库toaster-simulator,那么目录结构可能如下所示:
toaster-simulator/
.git/
HEAD
config
index
objects/
refs/
...
README
Makefile
src/
toaster.c
Run Code Online (Sandbox Code Playgroud)
.git存储库顶层只有一个目录.1此目录包含存储库的所有历史记录,其所有分支,构成历史记录中每个提交的每个文件的对象等.(例如,该.git/objects目录包含将对象名称映射到文件,提交和依此类推; HEAD指向当前分支;等等)您绝不应手动删除或更改此目录中的文件,否则您将面临破坏存储库的风险..git目录外的所有内容都是您的工作树.您只需在开发项目时正常编辑这些文件.
对于刚接触git的人来说,最令人惊讶的事情可能是,如果从一个分支切换到另一个分支,工作树中的文件可能会完全改变.虽然这在您第一次看到它时可能会令人担忧,但这是一个很棒的功能 - 您几乎不需要在计算机上拥有多个存储库副本,因为从一个分支切换到另一个分支是如此快速和简单.(为了阻止您丢失数据,如果您的工作树中的更改未在提交中记录,git将阻止您切换这样的分支,并且这些更改位于文件中,这些更改将以任何方式由分支切换.一旦你创建了一个特定状态的文件提交,git就会让你很难丢失这些文件.)
另一种类型的存储库是一个裸存储库,它基本上类似于.git目录但没有工作树.您通常会将此用于许多人将其更改推送到的存储库 - 您将不会在此存储库上进行开发,因此工作树将会妨碍您.通常,您可以使用项目名称和.git扩展名将包含裸存储库的目录命名为.例如,在远程服务器上,您可能有一个裸露的存储库,用于看起来像这样的烤面包机模拟器项目:
toaster-simulator.git/
HEAD
config
index
objects/
refs/
...
Run Code Online (Sandbox Code Playgroud)
当你第一次使用git时,你可能不需要使用裸存储库,但是要注意它们是很好的.当您在问题中询问是否能够在工作树之外拥有存储库时,它们可能是您用来与其他人共享代码的裸存储库.
我上面已经描述了传统的存储库布局,但实际上git目录和工作树可以是文件系统上的任何两个目录,如果你使用某些环境变量或git选项 - 但是,这超出了基本的git用法:)
1实际上.git,例如,可以使用git的子模块功能来嵌套存储库,每个存储库都有自己的目录.但是,鉴于您的问题,您现在不必担心这一点.
git repo创建在与源代码相同的位置.请记住,git与Subversion不同,在中央位置(例如,在服务器上)有一个存储库.相反,您的源代码目录是您的git仓库,如下所示:
$ cd mysources
$ git init .
$ git add ...
Run Code Online (Sandbox Code Playgroud)
现在mysources/.git将包含git对象数据库,您可以添加/ commit/branch/etc.
| 归档时间: |
|
| 查看次数: |
7056 次 |
| 最近记录: |