标签: git-subtree

git子目录中的git init

我有一个git repo,它有一些子目录:

  ~/src
  ~/src/.git
  ~/src/mystuff
  ~/src/otherstuff
Run Code Online (Sandbox Code Playgroud)

现在我想otherstuff与朋友分享,我打算用bitbucket做这件事.他们应该能够克隆它并推送更改,otherstuff但我不希望它们能够访问src,mystuff(甚至看不到它们存在).

我该怎么做?我几乎进入cd ~/src/otherstuff并做了git init,git remote add origin ssh://git@bitbucket.org/wim_glenn/...但是当它已经受版本控制时,有些事情没有闻到正确再次执行git init.

git git-submodules git-subtree

4
推荐指数
1
解决办法
3656
查看次数

合并简单的上游更改时,Git子树合并报告会发生冲突

我开始在git 1.8.2中学习子树合并.我创建了一个简单的示例来测试对迁移到主项目的第三方仓库的更改.

我正在关注6.7 Git工具 - 子树合并示例.

'sub'项目作为'main'项目的子目录包含在内.

在我对'sub'项目进行更改后,当我尝试将更改合并到'main'项目时,git会报告冲突.

测试摘要

  1. 为项目'main'和'sub'创建回购(sub而不是rack)
  2. 将远程命名的sub_remote添加到引用sub的main
  3. 使用sub_branch跟踪sub_remote
  4. 在'sub'项目中的文件中更改并提交一行
  5. 将更改从sub更改为main/sub_branch
  6. 将main/sub_branch合并到main/master中.

合并失败并发生冲突.Merge对要保留的更改行的版本感到困惑.

<<<<<<< HEAD
main
=======
main upstream change
>>>>>>> sub_branch
main.git
sub
sub.git
tm
Run Code Online (Sandbox Code Playgroud)

完整的测试脚本

#!/bin/sh

# initialize empty repos
for i in main sub
do
  rm -rf $i{,.git}
  mkdir $i.git
  cd $i.git;
  git --bare init;
  cd ..;
  git clone $i.git
  cd $i
  echo $i > readme.md
  git add readme.md
  git commit -a -m "added readme.md"
  git push origin master
  cd ..
done …
Run Code Online (Sandbox Code Playgroud)

git git-merge git-subtree

4
推荐指数
1
解决办法
1850
查看次数

如何删除已删除的 git subtree 文件夹的历史记录?

我使用 git-subtree 添加了一个 git 存储库。问题是我在使用 git-subtree 添加存储库之前进行了硬重置。现在提交历史仍在存储库中,但它已与 master 断开连接。

知道如何删除它吗?我试过 git rm --cached 没有运气。

git git-commit git-subtree

4
推荐指数
1
解决办法
3268
查看次数

忘了使用`--squash`,现在提交历史很乱.我怎样才能收拾这个烂摊子?

我应该为subtree pull --squash 我的项目所依赖的第三方模块执行,但我不小心忘记了--squash.现在我的项目提交历史充斥着第三方模块提交.它们分散在整个日志中.

这个烂摊子需要消失.我如何识别属于第三方模块的所有提交,将它们压缩为一个,然后从项目历史中清除它们,如果可能的话?

更多信息:

请注意,我已经做了几次提交,我打算在操作失败后保留.

git git-rebase git-log git-subtree

3
推荐指数
1
解决办法
675
查看次数

致命:不是git存储库:git status有效。但是git add。不

我有一个gitsubmodule,我无法正确卸载。(在这里猜测)。我添加了一个同名子树。一切顺利,直到我应该暂存文件为止。

$git status /*Shows unstaged files just fine*/
$git add . /*Prints error message*/

fatal: Not a git repository:MyProject/SLibrary/../.git/modules/SLibrary
Run Code Online (Sandbox Code Playgroud)

我如何摆脱错误消息的任何想法,所以我可以使用git add -a /登台文件。

git git-submodules git-subtree

3
推荐指数
1
解决办法
3944
查看次数

从 git 子树获取上游分支

在尝试使用 git subtree 找出一个好的工作流程时,我想跟踪master添加 git 子树时使用的上游分支(通常不同于)。

更具体地说,假设您定义了以下遥控器并用于获取它们:

  $> git remote add -f easybuild-easyblocks https://github.com/ULHPC/easybuild-easyblocks.git
  $> git remote add -f easybuild-easyconfigs https://github.com/ULHPC/easybuild-easyconfigs.git
  $> git fetch easybuild-easyblocks
  $> git fetch easybuild-easyconfigs 
Run Code Online (Sandbox Code Playgroud)

你可以看到不同的远程分支:

  $> git show-ref | grep -v tags | grep easybuild
  f4b4752bcadd5dd44aa74ee03f4bd19b75810bdb refs/remotes/easybuild-easyblocks/develop
  49a1e893160c6c1d2ad50109265e55586c377c1e refs/remotes/easybuild-easyblocks/master
  173aa5cabddf998e2ad672135752a33875095f8b refs/remotes/easybuild-easyblocks/v1.8.x
  49a1e893160c6c1d2ad50109265e55586c377c1e refs/remotes/easybuild-easyblocks/v1.9.x
  770c5246667d7741c02d4e1f4d4a50fb8cd3fcbe refs/remotes/easybuild-easyconfigs/develop
  d8422c6f7aace405f1089f178edabb9316629d4b refs/remotes/easybuild-easyconfigs/master
  5f3be9e2d5cbb2844ebf74ede15e2c30a8b12705 refs/remotes/easybuild-easyconfigs/uni.lu
  0382ff527360f1baa192bb92597552cc379bba68 refs/remotes/easybuild-easyconfigs/v1.8.0.x
  d8422c6f7aace405f1089f178edabb9316629d4b refs/remotes/easybuild-easyconfigs/v1.9.x
Run Code Online (Sandbox Code Playgroud)

现在假设您定义了两个新的 git 子树来跟踪develop远程easybuild-easyblocks(分别v1.8.0.x为远程easybuild-easyconfigs)的上游分支:

  $> git subtree add --prefix easybuild/easyblocks  --squash easybuild-easyblocks/develop
  $> …
Run Code Online (Sandbox Code Playgroud)

git git-subtree

3
推荐指数
2
解决办法
1009
查看次数

带有 --subdirectory-filter 的 git filter-branch 删除所有文件

我想拆分一个非常标准的存储库。原始存储库必须具有以下结构:

root
|-AAA
|-BBB
  |-BBB1
  |-BBB2
|-CCC
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令将目录 BBB1 及其所有内容提取到一个单独的存储库中

git filter-branch --subdirectory-filter BBB/BBB1 -- --all
Run Code Online (Sandbox Code Playgroud)

这导致 git 重写一堆提交并以 git 的最终语句结束

Ref 'refs/heads/master' was rewritten
Run Code Online (Sandbox Code Playgroud)

所以这对我来说似乎很好。但是,当我看看到目录下的git结束后,库不再包含任何的源文件,但只有git的在文件夹的根。使用 SourceTree 浏览此存储库我可以在日志中看到(可能)正确的提交,这些提交只会影响BBB1但每次提交不再引用任何文件,因为它们都消失了!

我究竟做错了什么?为什么所有文件都消失了,甚至是我实际过滤的文件?

提前致谢!

西蒙

git git-filter-branch git-subtree

3
推荐指数
2
解决办法
3374
查看次数

将更改从git子树推送到分支以获取拉取请求

如何创建对a的本地更改git subtree,然后将这些更改推送到子树的repo中的分支,以便我可以创建一个pull请求以将来自该分支的更改合并到子树中master

假设我有两个回购协议,project并且protocols,这两者都是我的控制之下.

第1步:在repo中添加protocols为asubtreeproject

$ git remote add protocols git@bitbucket.org:corp/protocols.git

$ git remote
origin
protocols

$ git subtree add --prefix=protocols protocols master --squash
...
From bitbucket.org:corp/protocols
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> protocols/master
Added dir 'protocols'
Run Code Online (Sandbox Code Playgroud)

第2步:在projectrepo中protocols对子树中的文件进行一些更改

$ cd protocols
$ echo "foo" > some_file
$ git commit -a -m "added foo"
Run Code Online (Sandbox Code Playgroud)

步骤3:在protocolsrepo中创建一个分支,并将我的本地更改从project/protocols子树推送到该分支

??

我不确定如何最好地实现这一目标......

一旦我的 …

git git-subtree

3
推荐指数
1
解决办法
2475
查看次数

Git 子树:将子树移动到不同的目录并拉取它

假设我创建了一个这样的子树:

git subtree --add --prefix=subdir <path_to_remote> <remote_branch> --squash
Run Code Online (Sandbox Code Playgroud)

然后我想移动/重命名子目录,所以我这样做: git mv subdir dir2/subdir

现在,当我尝试将该子树拉到新前缀时:

git subtree --pull --prefix=dir2/subdir <path_to_remote> <remote_branch> --squash
Run Code Online (Sandbox Code Playgroud)

git 说:

Can't squash-merge: 'dir2/subdir' was never added.
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确地做到这一点?

git git-subtree

3
推荐指数
1
解决办法
2127
查看次数

如何分叉 monorepo 的一部分并且仍然能够合并上游提交?

有时我在 GitHub 上发现monorepo由多个 npm 包组成,我想对其进行一些修改并在我的项目中使用它。但是 npm 从 git 子目录安装包比从 git 存储库安装要困难得多[ 1 ][ 2 ]。由于我会自己进行修改,所以我想知道如何设置自己的 git 存储库,以便 npm 可以轻松安装,并且可以合并上游更改。

目前,我使用GitHub 上的本指南将包与 monorepo 的其余部分分开,即

git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME  BRANCH-NAME 
Run Code Online (Sandbox Code Playgroud)

Npm 可以轻松安装存储库,但我发现很难合并任何上游更改。

以前有人这样做过吗?任何想法?

git git-subtree monorepo

3
推荐指数
1
解决办法
2699
查看次数