有没有办法在git中共享存储库的历史记录而无需再次克隆整个文件夹?相当于Mercurial的东西
hg share project project-branch
答案 0 :(得分:5)
如果我理解hg share
的文档,那么最接近的Git等效项将是git worktree
,这是2.5版本中的新功能:
管理连接到同一存储库的多个工作树。
git存储库可以支持多个工作树,允许您一次签出多个分支。使用
git worktree add
,新的工作树与存储库相关联。这个新的工作树称为“链接工作树”,而不是“git init”或“git clone”编写的“主工作树”。存储库有一个主要工作树(如果它不是裸存储库)和零个或多个链接工作树。
我相信它仍处于测试阶段,并且明确警告不要将其与子模块一起使用。
从存储库运行git worktree add ../some/path/ branch
会创建一个新的工作副本,并在branch
签出../some/path/
。
可以在on GitHub's blog找到对此新命令的更长概述。
答案 1 :(得分:0)
评论时间太长,所以有新答案:
我发现此流程在hg中是完全正常的-在git中这是不可能的,不是用worktree,而不是其他任何命令,似乎(?)
3 bash-4.2# cd m/
3 bash-4.2# hg init
3 bash-4.2# cd ..
3 bash-4.2# hg share m pm1
updating working directory
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 bash-4.2# hg share m pm2
updating working directory
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 bash-4.2# cd pm1/
3 bash-4.2# touch foo
3 bash-4.2# hg add foo
3 bash-4.2# hg commit -m test foo
3 bash-4.2# cd ../pm2/
3 bash-4.2# hg log
changeset: 0:d5e4a426dca0
tag: tip
user: xxx
date: Wed Apr 10 15:32:32 2019 +0200
summary: test
3 bash-4.2# ls
3 bash-4.2# hg summary
parent: -1:000000000000 (no revision checked out)
branch: default
commit: (clean)
update: 1 new changesets (update) # <--------------- ! :-)
3 bash-4.2# hg up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 bash-4.2# ls
foo
在git中,它们不支持该流程。 它只允许一次检出同一件事-而且它们的理由(不干净的工作树)并不能说服我,因为在hg中这也是可能的,如您所见。
同样在hg中,要更新您共享的一个,好,对其进行更新(hg pull)。
在git中,您必须说:
git fetch origin +refs/heads/*:refs/heads/* --prune