标签: git-subtree

Git子树合并策略或子树命令?

我正在开始一个新的Zend Framework项目,我将与设计师合作.我将使用git维护这个项目代码,通常设计师不会说git(或任何编程语言),所以我想让他的事情变得简单,否则我恐怕他根本不会使用git.我的计划是给他一些Git gui,并且他应该只使用基本的git功能,例如commit,diff,fetch,merge,push和pull.

我正在使用gitolite来维护我们的git存储库的共享副本,因为它有一个精细的权限系统,我将只为设计者提供RW访问权限(设计)和对其他分支的读访问权限.

为了简单起见,我想与他分享主项目中的一些文件夹(遵循ZF推荐的结构),他确实需要访问它才能完成工作.与此同时,我希望我们两个人仍然能够相互融合.

他的分支的结构减少应该是这样的:

<project name>/
    application/
        layouts/
            scripts/
        views/
            scripts/
    public/
        css/
        images/
        js/
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用子模块完成这项任务,但维护起来会很麻烦,因为我应该将项目拆分到(至少)4子库中,他应该只能访问子库,并且他有3个存储库可以使用.因此,如果这是唯一的解决方案,我会放弃这个想法.

我已经读过的一些链接让我觉得我所要求的是可能的:

这是我的问题:

  1. 如何创建简化分支design(git checkout -b designgit mv/rm?)
  2. 如何配置git来跟踪分支机构的编辑(所以我可以git merge design从主分支,反之亦然)

更新:

我找到了另外两种可能解决这两个问题的方法

我尝试git rm all-unneeded-stuff在设计分支中实现第一个后,我在主分支中进行提交,其中涉及白名单路径中的文件和黑名单路径中的另一个文件,但是git merge失败并显示以下消息

CONFLICT (delete/modify): application/Bootstrap.php deleted in HEAD and modified in master. Version master of application/Bootstrap.php left in tree.
Run Code Online (Sandbox Code Playgroud)

然后我在master分支中添加了一个新目录,当从设计中合并时,添加了新目录.我在驱动程序中添加了一些调试回声,我发现在两种情况下都没有调用它,可能是因为它不是真正的合并.

我还没有尝试过第二种方法(.gitignore),但是如果我已经理解这种方法不符合我的需求,因为它只会忽略设计分支中列入黑名单的文件,但是它们会在设计分公司,打破了我的要求.

我把我的实验推到了GitHub上

更新2:

我认为目前没有解决方案.使用当前的git实现,这根本无法实现.

我想要反驳,但我担心它不会发生.

git git-merge branching-and-merging git-subtree

5
推荐指数
1
解决办法
1902
查看次数

git子树添加:更改前缀保留本地提交

是否有一种简单的方法来移动使用以下cmd添加的子树

git subtree add --prefix=<prefix> <repository> <commit>
Run Code Online (Sandbox Code Playgroud)

换句话说,是否可以将前缀更改dir1dir2.

git子树的答案:可以在分叉存储库中更改子树分支/路径吗?建议删除子树然后添加回来.

它对我不起作用,因为我需要保留本地提交,还有另外一种方法吗?

git git-subtree

5
推荐指数
1
解决办法
2104
查看次数

单独的Git Repos用于前端和后端Web开发

我一直在研究git子模块,git子树和稀疏检查,我根本无法绕过它.这是我的用例:

我有一个repo,比方说frontend-repo,它不仅包含基于AngularJS的前端的文件,还包含与测试,文档等相关的一些文件夹.此repo中的子文件夹,称为"codebase",存储HTML,CSS和JS为应用程序.

我有另一个回购,让我们说backend-repo,它持有python/flask后端,它最初服务于AngularJS应用程序.这些文件需要位于application/static子文件夹中.

在进行开发和测试时,我们需要在application/static,debug,test,iterate中编辑文件直到完成.基本上,我一直在尝试使用git找到一种方法,将前端/ codebase文件夹本地检出到后端repo中.子模块我无法上班; 子树似乎也无法处理这个用例.

这里的最佳做法是什么?我可以简单地从一个目录设置一个符号链接到另一个目录,但我希望git有一个更好的方法来做到这一点.有没有人有这种工作流程的经验?

git git-submodules git-subtree

5
推荐指数
1
解决办法
1940
查看次数

无法使用sourcetree推送子树

我希望使用git子树来使用我在项目仓库中拥有的框架仓库.这应该是这样的:

  • 项目
    • 有些东西
    • 有些东西
    • 骨架

使用Sourcetree应用程序的Windows我做了以下:

  • 克隆项目
  • 在名为framework的文件夹中添加Subtree框架
  • 在框架中添加test.txt

这导致我这样的事情:

  • 项目
    • 有些东西
    • 有些东西
    • 骨架
      • 的test.txt

然后Sourcetree告诉我test.txt没有为commit提交,所以我添加它并提交它.

我可能使用它错了,但我找不到一种方法来确保test.txt实际上被添加到框架repo而不是项目/框架,因为它似乎是.

如果我按下这个,我按预期在project/framework/test.txt中得到了正确的文件,但是框架repo仍然是空的(它没有收到我做的更改)

我以为我必须手动推送子树将这些更改提交到框架repo但它似乎无休止地循环而不给我任何错误

我让它运行超过10分钟,但没有得到任何结果.任何帮助将非常感激.

谢谢你的时间.

git github git-subtree atlassian-sourcetree

5
推荐指数
1
解决办法
4368
查看次数

在删除文件时合并Git子树时出现问题

我想在我的一个项目中使用子树,并使用此处描述的方法.在从子树中删除某些文件的情况下,将子树合并到子项目中时遇到问题.似乎在合并期间文件删除不会从子树集成分支传播到主分支.

我在Kubuntu 14.04上运行Git 1.9.1,并在我的主项目中集成.sub_projectsubtree

  1. 修改一个文件并删除我的另一个文件 sub_project

  2. 提交修改

  3. 浏览我的主项目

  4. 签出sub_project集成分支

  5. 拉修改(我看到修改后的文件的修改和删除的删除文件)

  6. 检查master我的主项目的分支

  7. git diff-tree -p sub_project_branch 表示已修改一个文件,并且已删除一个文件

  8. 执行我的子树集成分支到主分支的合并(删除的文件仍在那里,而修改已集成)

以下是相应的命令:

创建将用作子树的项目

$ mkdir sub_project
$ cd sub_project
$ git init
$ touch toto
$ echo "-----------------" >> toto
$ echo "- toto file">> toto
$ echo "-----------------" >> toto
$ touch tata
$ echo "-----------------" >> tata
$ echo "- tata file">> tata
$ echo "-----------------" >> tata
$ git add toto …
Run Code Online (Sandbox Code Playgroud)

git git-merge git-subtree

5
推荐指数
0
解决办法
118
查看次数

将master合并到子树分支中

我有一个很大的Git项目,我想用他们自己的存储库解剖到子项目中.Git的子树是完成这项任务的理想选择:首先

  • 使用仅一个子文件夹的内容创建一个分支

    git subtree split -P <name-of-folder> -b <name-of-new-branch>
    
    Run Code Online (Sandbox Code Playgroud)

    然后

  • 将此分支拉入另一个存储库.

对于过渡阶段,我希望子项目是只读的,并从master中同步它们.对于每个要掌握的提交,我当然可以对所有子项目重复执行上述过程,但这似乎不太理想,因为它重新完成所有工作.

有没有办法将master合并到子树分支中?

git git-merge git-subtree

5
推荐指数
0
解决办法
162
查看次数

将许多子目录拆分为一个新的独立Git存储库

这个问题与以下内容有关:

我想分离一对,而不是分离一个子目录.例如,这是我的文件夹结构:

/app1
  /file1
  /file2
  /folder1
  /folder2
/app2
  /file3
  /file4
  /folder3
  /folder4
/test
  /file5
  /file6
  /folder5
  /folder6
/README.md
/new_file
Run Code Online (Sandbox Code Playgroud)

而我想这样做:

/app1
  /file1
  /file2
  /folder1
  /folder2
/app2
  /file3
  /file4
  /folder3
  /folder4
Run Code Online (Sandbox Code Playgroud)

我尝试了以下替代方案,到目前为止还没有工作:

git filter-branch --index-filter 'git rm --cached -qr -- . && git reset -q $GIT_COMMIT -- /app1/* app2/*' --prune-empty -- --all

Error: 
    pathspec '.' did not match any files
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

git filter-branch --tree-filter "mkdir samples; mv app1 app2 samples/" HEAD

Error:
   rename app1 to …
Run Code Online (Sandbox Code Playgroud)

git git-filter-branch git-subtree

5
推荐指数
1
解决办法
2732
查看次数

Git子树通常是--recursive git repo

我创建了一个子树:

git subtree add --prefix etc/theos https://github.com/theos/theos.git master --squash

但这个回购通常是用--recursive旗帜克隆的,我注意到回购中应该存在的东西没有.

我没有看到--recursive子树的标志.我怎样才能让它发挥作用

git git-subtree

5
推荐指数
0
解决办法
355
查看次数

推动Squashed子树改变为gerrit

在添加子树时:

git subtree add --prefix = vendor https://example.com/repo master --squash

创建了两个提交.一个用于压缩子树提交

Squashed 'vendor' changes from 15fc2b6..c6dc29b
Run Code Online (Sandbox Code Playgroud)

和合并提交

Merge commit 'SHA1' into master
Run Code Online (Sandbox Code Playgroud)

当我想将此更改推送到gerrit时,它需要一个changeID.但是git不允许我这样做

git rebase -i HEAD~2

和我做任何其他提交一样的返工,因为它是一个被压扁的提交.

由于这个原因,我无法将这种变化推向格里特.我无法直接将更改提交到头(git)并破坏超模块上的内容.它必须经过构建和测试.任何建议或帮助表示赞赏.

git gerrit git-subtree

5
推荐指数
1
解决办法
557
查看次数

Git子树与Monorepo

我们最近决定从TFVC迁移到Git,我正在尝试寻找设计新Git架构的最佳方法。

我们的代码由独立但紧密耦合的模块组成,让我们看一下以下项目:

  • CommonLib1

  • CommonLib2

  • ApplicationA(使用CommonLib1

  • ApplicationB(用途CommonLib1CommonLib2

虽然CommonLib1/ CommonLib2是完全独立的,几乎每一个新功能ApplicationA/ ApplicationB需要修改CommonLib1/ CommonLib2

此外,在添加新功能时,我们希望创建一个跨我们所有项目的分支。

据我了解,我还有两个主要选择:

  1. 为每个项目创建一个仓库,并在/中添加CommonLib1/ CommonLib2作为子树。ApplicationAApplicationB

  2. 为所有项目创建一个Monorepo。

对于我的情况,最佳的Git实践是什么?

git version-control tfs git-subtree monorepo

5
推荐指数
1
解决办法
1237
查看次数