Git元数据-是否有一种方法可以添加独立于每个分支的Git元数据?
最终目标:我希望有Git跟踪的文件,但所有分支的文件版本都相同。如果忽略文件,则所有分支的文件都是相同的,但不幸的是,这些文件没有被跟踪。当我运行Git元数据-是否有一种方法可以添加独立于每个分支的Git元数据?,git,git-clone,Git,Git Clone,最终目标:我希望有Git跟踪的文件,但所有分支的文件版本都相同。如果忽略文件,则所有分支的文件都是相同的,但不幸的是,这些文件没有被跟踪。当我运行gitpush或类似程序时,我需要在repo之间传递这些文件,等等 例如,.git文件夹中的数据通常被git忽略。我想将一些数据添加到我的回购协议中,以便数据独立于所有分支,但仍然显示在所有分支中,当您克隆回购协议时,数据会显示出来 这可能吗?例如,如果.git目录如下所示: .git/ branches/ hooks/ objects/
gitpush
或类似程序时,我需要在repo之间传递这些文件,等等
例如,.git文件夹中的数据通常被git忽略。我想将一些数据添加到我的回购协议中,以便数据独立于所有分支,但仍然显示在所有分支中,当您克隆回购协议时,数据会显示出来
这可能吗?例如,如果.git
目录如下所示:
.git/
branches/
hooks/
objects/
config
HEAD
index
我正在考虑添加一个文件夹:
.git/
.oresoftware/
把我的数据放在那里,数据独立于所有分支
我认为这行不通,因为.git回购协议中的数据实际上没有被跟踪。我正在寻找git跟踪的东西,但对所有分支都是一样的
更新:在阅读了答案并思考了一段时间后,我想如果我用新文件修改初始提交,那么它可能会神奇地工作,但当然Git不是这样工作的,每次提交都是一个完整的快照,因此事后更改历史提交不会更改较新的提交。好的,我想我现在明白你的疑问了。基本上,您需要将数据添加到一个可见文件夹中,以便git跟踪它,即在其中一个分支中添加,并将该分支合并到
主节点
,然后将其他两个分支与主节点
同步(git fetch origin master&&git merge origin master
)。在这种情况下,由于您在git中添加了一个新的文件/文件夹,所以不会遇到合并冲突。最后,您的数据将在所有分支中可用。
EDIT(基于另一个用户的评论):git cherry pick
是可以将特定提交应用于分支的另一种方法
。。。.git文件夹中的数据通常会被git忽略
这不仅是典型的,而且是Git安全模型所必需的
(过去,Git存在一些缺陷,您可以创建名为.Git/whatever
的文件,然后将它们放入存储库,然后在Windows和MacOS上签出时存在于.Git/whatever
中,因为这些系统默认忽略大小写:名为.Git/foo
的文件实际上创建为.Git/foo
,因为>.git
此时存在。此错误已在现代git中更正。)
我想将一些数据添加到我的回购协议中,以便数据独立于所有分支,但仍然显示在所有分支中,当您克隆回购协议时,数据会显示出来
这可能吗
没有,但是有其他方法可以得到你想要的
克隆存储库相当于执行以下步骤:
- 创建空目录(或使用现有目录):
mkdir path
- 在那里创建一个新的空Git存储库:
cd路径&&Git init
- 为URL添加一个远程,通常命名为
:origin
git remote Add origin URL
- 从远程获取所有信息:
git-Fetch-origin
- 通过
:git checkout
,创建一个分支,该分支通常是从在前面的git checkout branch
步骤中创建的远程跟踪名称创建的git fetch
git config
步骤。最后选择的要创建的分支是-b
参数中的分支。如果-b
参数指定了标记而不是分支,git只需在不创建任何分支的情况下签出分离的头。如果不提供-b
参数,Git将使用来自远程的指令来确定要创建哪个分支。默认值以及通常的结果是master
,创建为指向与origin/master
相同的提交
一旦存储库中存在一个分支或一些分支,这些分支更准确地说,那些名称,如master
和develope
等,都属于存储库的所有者。它们可以对它们做任何想做的事;作为它们克隆的存储库的所有者,您无法阻止它们。您不能让他们的分支中显示一个文件。当然,我们可以这样说整个存储库,所以作为一个论点,这有点愚蠢:你确实不能控制他们;整个存储库是他们自己的
那么,你大概想让他们更容易地将一些内容安装到某个文件中。方法是让这些内容可以通过简单的名称访问。但是Git提供了什么名称呢
好的,在底层,Git存储的是提交,而提交又存储存储blob(文件内容)的树(路径名)。任何给定提交、树或blob的实际名称都是一个原始哈希ID,哈希ID是不可预测的,通常对人类不有用或不可访问。因此,您可以告诉人们,比如:
将哈希ID1bdc91e282c5393c527b3902a208227c19971b84
提取到.oresoftware/foo
但是(1)散列ID是不可理解的,(2)谁想输入所有这些?如果你有多个文件,你需要每个文件一个blob散列ID。真恶心
但有一种更好的方法可以做到这一点。您可以创建一个提交对象,其中包含名为.oresoftware/foo
、.oresoftware/bar
等文件。这是一个普通的提交,可以随时提取到普通的工作树中
现在假设您将此提交放在名为ORESOFTWARE
的分支上