- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
因此我们创建了一个模板项目“template_proj.git”。
更新 git 版本是:Windows 7 prof 上的 2.14.1
我们有一些新的项目是空的,除了它们有一个带有 .gitignore 文件的提交。假设其中一个项目称为“projectA.git”。
所以我的方法是:
clone template_prog.git --depth=1 --recursive
git remote rm origin
git remote add origin projectA.git
git pull origin master --allow-unrelated-histories
这很好用。 注意:我不从模板克隆中删除我的 .git 文件夹的主要原因是它有子模块。
这给了我一个包含 3 个提交的 repo(这正是我想要的):
然而,有一个特殊的标签/分支“嫁接”与 template_proj.git 的提示
提交相关联。我真的不想那样。
所以我的问题:
grafted
标签?嫁接
标签?我无法完全理解 grafted
的真正含义/含义 - 我确实搜索过它并找到了一些信息,但仍然不太确定。作为 git 搜索中的关键字,它被更常见的项目所取代(或者我的 google-fu 很弱):(
更新:这里的这个问题也没有完全回答:What exactly is a "grafted" commit in a shallow clone? - 因为它并没有真正说明为什么存在嫁接或如何处理它(如果有的话)。我的仓库中也没有:.git/info/grafts
文件。
最佳答案
它不是标签,如果不使存储库非浅层化(例如,git fetch --unshallow
),则无法删除它。 标记 表示这是历史记录的中断点。
但是,您可以通过加深历史来移动标记。由于标记存在于历史被截断的每次提交中,如果历史在您关心的点以下被截断,您将看不到该标记。例如,使用深度 2 会将标记放在您获得的提交下方。
请注意,计算机科学家喜欢把他们的树倒过来画:不是树叶在顶部, Twig 伸向地面,然后树干伸入地面,计算机科学理论家从树干开始:
|
然后在它下面添加分支:
|
/ \
然后把叶子放在底部。
为了 StackOverflow 的目的,我喜欢在左边画我的树,右边叶子:
o--o
/
o--o--o
\
o--o
这里我们有一个简单的树,有两个分支。让我们标记分支:
o--o <-- master
/
o--o--o
\
o--o <-- develop
恭喜,你现在了解了 Git 的分支! 咳嗽 好吧,也许还没有。 :-) 还有更多内容,包括提交形成一个图而不是一个简单的树,但这就是我们现在所需要的:我们有我们需要说什么是浅克隆是。让我们绘制一个深度为 2 的浅克隆,由同一个存储库制作:
o--o <-- master
X
X
o--o <-- develop
在这里,我们仍然有两个相同的分支名称,master
和 develop
,它们仍然指向两个不同的提交。他们的每个提交都指向一个第二个(较早的)提交。这两个中的每一个都指向(共享的)第三次返回提交,但是我们已经达到了深度限制,所以每个都有一个标记——一个 X
划掉了返回到之前的链接提交。
当您运行 git log
或任何显示提交的内容时,您就会看到这个标记。 Git 需要知道它不应该尝试寻找更多的提交——它确实的提交说“我之前的提交是……”但是之前的提交丢失 .如果没有标记,Git 会告诉您存储库已损坏。
如果我们将 --depth
设置为 3,则标记会更靠后:
o--o <-- master
/
X-o
\
o--o <-- develop
但如果 --depth
设置为 1,则标记就在每个提示提交处,您将始终看到它。
关于git shallow clone - 我如何删除 "grafted tag"它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49731594/
什么是 vb6 或 java 中的对象克隆?我们在什么情况下使用克隆?克隆对象是什么意思?谁能用例子告诉我。 最佳答案 克隆实际上是将对象数据复制到新对象中。 此示例不克隆数据: Foo p = ne
ArrayList a=new ArrayList(); a.add(5); ArrayList b=(ArrayList)a.clone(); a.add(6); System.out.printl
这个问题在这里已经有了答案: Why does cloned() allow this function to compile (1 个回答) 关闭 3 个月前。 假设我们有一个可以克隆的某种类型的
我有这样的代码,我需要在其中将某些内容插入到两个单独的 HashMap 中。我只想要实现克隆的通用类型。 use std::collections::HashMap; use std::clone::
这段代码(also on play) use std::sync::Arc; struct Foo { x: isize, // Something complex in actual cod
我有按钮 Drag to insert h1 tag 当你拖动它时,我希望按钮留在原来的位置,助手是 Example在你放下它的地方,你会放下h1没有任何可拖动或 jQuery UI 样式的标记。 所
覆盖 clone 方法,而不实现 Cloneable 接口(interface)并且不调用 super.clone() 是一个好习惯。这样,就不会抛出 CloneNotSupportedExcepti
public abstract class Shape implements Cloneable { private String id; protected String type;
克隆远程仓库后,它不会通过 -a 选项显示任何远程分支。可能是什么问题呢?如何调试呢?在此片段中,未显示两个远程分支: $ git clone --depth 1 git://git.savannah
我看过这个答案for a git clone error ,建议不要克隆整个 repo,而是只克隆最新的提交,然后使用 unshallow 获取其余的提交。 考虑以下两个命令 1. git clone
当在网上搜索如何以多态方式深层复制对象的可能性时,我发现了 solution声称可以使用 clone() 方法解决许多问题,例如无法克隆 final 字段。该解决方案结合了在 clone() 实现中使
我正在尝试创建一个动态表单来向业务合作伙伴展示。 目标是能够在单击按钮时根据需要添加选择元素。但是,当它被点击时,它会复制模板两次,而不是一次。 这里只是我尝试过的代码的一些变体和 here is t
我知道实现 Object#clone() 的约定表明您应该调用 super.clone() 来获取复制的对象。 但我只是想知道如果我不这样做的话会有什么后果。让我们假设这个例子: class Some
我所说的示例:http://jsfiddle.net/bsnxp/1/ 如果你检查源 .show().clone() display 是 inline-block (它应该是什么)并且 .clone(
我正在编写代码来创建对象、克隆对象,然后比较两者。 所讨论的对象 Octagon 是对象 GeometricObject 的扩展 public class Octagon extends Geomet
我看到clone()在django代码中被广泛使用 queryset.query.clone() queryset.clone() 它的用途是什么?我应该模仿查询集或管理器方法中的行为吗? 最佳答案
我尝试导入 git project进入 eclipse 。手册告诉我在控制台中使用此命令: git clone http://git-wip-us.apache.org/repos/asf/mina-
我正在使用 jquery .clone(),它工作正常。但是我的问题是,当我克隆我的输入字段时,它也会克隆前一个字段的值。我不想克隆该值。我该如何克服这个问题? 这是我的代码 function add
在 this SO thread 中,结果表明,在制作项目副本方面,切片比任何方法都快。 使用: list1 = ['foo','bar'] copy1 = list1 * 1 list1.pop()
我有一个自动脚本可以解析服务器并克隆其中一个文件夹中的所有存储库。它所做的伪代码是: for each repo_name if a folder named like repo_name exi
我是一名优秀的程序员,十分优秀!