在我天真的时候,我已经设置了一个git子模块并将其视为Subversion外部 - 即它现在充满了我刚才意识到的未经提交或推送到任何地方的变化.
是否有一些简单的方法将子模块更改提交/推送回上游存储库?Git推荐的技术是什么,以这种方式在单独的(但链接的)存储库上同时进行开发?
我不清楚以下是什么意思(来自git submodule update docs):
...将使子模块HEAD分离,除非
--rebase或--merge指定...
怎么--rebase/ --merge改变事情?
我的主要用例是有一堆中央存储库,我将通过子模块嵌入到其他存储库中.我希望能够改进这些中央回购,直接在他们的原始位置,或从他们的嵌入回购(通过子模块使用它们的那些).
我使用svn:externals从另一个SVN存储库中使用了两个SVN项目.
我怎样才能在Git中拥有相同的存储库布局结构?
我们正在将我们(巨大的)项目转移到git,我们正在考虑使用子模块.我们的计划是在超级项目中有三个不同的头:发布,稳定,最新.项目负责人将处理释放和稳定的分支机构.他们将根据需要移动子模块.
问题是"最新"头.我们希望超级项目"最新"头部跟踪所有子模块的主分支(自动).如果能够显示子模块的所有提交历史,那也很棒.
我看过gitslave,但它不是我们想要的.有什么建议?
我喜欢Subversion设置的方式之一就是我可以拥有一个包含多个项目的主存储库.当我想在一个项目上工作时,我可以查看该项目.像这样
\main
\ProductA
\ProductB
\Shared
Run Code Online (Sandbox Code Playgroud)
然后
svn checkout http://.../main/ProductA
Run Code Online (Sandbox Code Playgroud)
作为git的新用户,我想在提交特定工作流程之前探索该领域的一些最佳实践.从我到目前为止所读到的,git将所有内容存储在项目树根目录下的单个.git文件夹中.所以我可以做两件事之一.
产品之间存在依赖关系,因此单个大型项目似乎是合适的.我们将使用一个服务器,所有开发人员都可以共享他们的代码.我已经通过SSH和HTTP工作了这部分我喜欢的部分.但是,SVN中的存储库已经有很多GB的大小,因此在每台机器上拖动整个存储库似乎是一个坏主意 - 特别是因为我们需要承担过多的网络带宽.
我想,Linux内核项目存储库同样大,所以必须有一个正确的方法来处理这个用Git,但我还没想到它.
是否有使用非常大的多项目存储库的指南或最佳实践?
我的问题是关于Git处理分支的方式:无论何时从提交分支,此分支都不会从父分支接收更改,除非您通过合并强制它.
但是在其他系统如Clearcase或Accurev中,您可以指定分支如何填充某种继承机制:我的意思是,使用Clearcase,使用config_spec,您可以说"获取在分支/ main/issue001上修改的所有文件"然后继续使用/ main或具有此特定基线的那些".
在Accurev中,您还有一个类似的机制,让流可以从上层分支(流如何调用它们)接收更改,而无需在分支上合并或创建新的提交.
使用Git时不要错过这个吗?你能枚举这种继承是必须的场景吗?
谢谢
更新请阅读下面的VonC答案,以实际关注我的问题.一旦我们同意"线性存储"和基于DAG的SCM具有不同的功能,我的问题是:哪些是真实生活场景(特别是对于OSS以外的公司),线性可以做DAG无法做到的事情?他们值得吗?
我希望将Git作为我雇主(250人)公司的主要来源控制.在继续讨论之前,我想回答以下问题.
Git是否有任何特定的最大文件大小限制可以处理?如果是这样,它是什么?
Git推荐的最大存储库大小是多少?这有助于我确定我应该在存储库中设置的内务处理.
当我将Git子模块添加到这样的Git存储库时,
git submodule add ssh://server/proj1/ proj1
git submodule init
git submodule update
Run Code Online (Sandbox Code Playgroud)
添加的子模块将处于分离的HEAD模式.我不知道那是什么,但我知道子模块将链接到目标存储库的特定修订版.
我不知道它是如何工作的,无论如何它看起来像是一个代理分支.我通过切换到master分支解决了这个问题.
cd proj1
git checkout master
Run Code Online (Sandbox Code Playgroud)
这将切换当前分支实际主HEAD,但这不会更新链接.因此,如果再次克隆整个存储库,它仍将链接到旧版本.
如果我想让它始终与最新版本(HEAD)相关联,我该怎么办?
我有一个带有一些子模块的项目.其中许多是从GitHub fork中克隆到的,我为自定义mod添加了一个分支.典型的设置如下:
在本地文件夹中:MyProject1/Frameworks/SomeAmazingRepo /
$ git branch -vva
*my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
master abcdef [origin/master] Latest commit msg from original repo
remotes/my-fork/my-fork 123456 [my-fork/my-fork] Latest commit msg from fork
remotes/my-fork/master abcdef [origin/master] Latest commit msg from original repo
remotes/origin/HEAD -> origin/master
remotes/origin/master abcdef [origin/master] Latest commit msg from original repo
$ git remote -v
my-fork git@github.com:MyUser/SomeAmazingRepo.git (fetch)
my-fork git@github.com:MyUser/SomeAmazingRepo.git (push)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (fetch)
origin git://github.com/OriginalOwner/SomeAmazingRepo.git (push)
Run Code Online (Sandbox Code Playgroud)
我git clone --recursive我的项目开始一个新的分拆计划,当它开始递归,它吐出了一个错误,声称它找不到这些回购存储的提交.检查后,似乎没有添加遥控器,并且分支机构在主机中留下(空)...
在本地文件夹中:MyProject2/Frameworks/SomeAmazingRepo /
$ git branch …Run Code Online (Sandbox Code Playgroud) 我们正在考虑将我们的VCS转换为git或subversion.我更喜欢切换到git,但是subversion有一个很好的功能,我没有在git中看到:每个目录访问控制.
我们目前在cvs中有project1,project2存储库,具有不同的权限.我们想拥有一个单独的存储库,其中两个目录project1和project2具有不同的权限.是否可以使用git,因为它与svn一样?
我知道子模块,它可能实现这一点,但我们的目标是能够通过project1和project2中的更改进行一次提交.
我们主要有IP问题,并希望确保有些人无法读取(而不仅仅是推送)某些目录.那么,是应对挑战还是我必须使用git-svn?
谢谢