相关疑难解决方法(0)

从现有的本地分支创建一个新的git存储库

我有一个带有两个分支的Git存储库:masterredesign.该redesign分支是从那时创建的master,并且master从那时起就没有被触及:

master
...|--m50--\
            \--m51--|--m52--|--m53-- redesign
Run Code Online (Sandbox Code Playgroud)

redesign分行已经发展这么多,我想从它创建一个新的整体存储库,以第一次提交的redesign作为初始提交新的存储库中,忘记以前的历史继承自master:

master
...|--m50--

redesign
--r1--|--r2--|--r3--
Run Code Online (Sandbox Code Playgroud)

这可能与Git有关吗?有一个相关的问题,但它的目标是使用目录,而不是分支.

谢谢!

git branch

6
推荐指数
1
解决办法
4229
查看次数

Git命令可以破坏/重写历史记录

你能提供一个(全部或最常见的)操作或命令列表,这些操作或命令会危害git中的历史记录吗?

什么应该绝对避免?

  1. 推送此提交后修改提交(git commit/ git push/ git commit --amend)
  2. 重新启动已经推动的东西

我希望这个问题(如果它还没有在其他地方之前提出过)成为关于git常见的可避免操作的某种参考.

此外,我使用git reset了很多,但我还没有完全意识到我可以对存储库(或其他贡献者副本)造成的损害.可能git reset有危险吗?

git github git-rewrite-history

6
推荐指数
3
解决办法
1472
查看次数

使用git filter-branch拆分repo:如何从重命名/移动的文件中恢复历史记录?

免责声明:我已经看到Detach(move)子目录进入单独的Git存储库,但它没有完全回答这个问题.

我已经将一个项目从svn迁移到git.当它存在于svn中时,一些文件被移动和/或重命名.

在git迁移之后,一些提交只能在 git log --follow

所以:

git结构如下:

MyMainRepo/
.git/
XYZ/
ABC/myFile.txt
Run Code Online (Sandbox Code Playgroud)

git log ABC/myFile.txt show: - commit1 - commit2

git log --follow ABC/myFile.txt 显示: - commit1 - commit2 - commit3(那时ABC目录不存在)...

现在,当拆分git repo以获得一个独特的ABC git repo时: git log --follow ABC/myFile.txt现在丢失了旧的历史记录,我只是:

  • commit1
  • commit2

我想要的是什么:

  • 从MyMainRepo拆分ABC,
  • 不要失去历史

欢迎任何帮助:)

svn git history git-filter-branch

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

git多项目合并

我们将一个项目分配到自己的代码库中,但它将紧跟其分支的项目.

我看到它像这样工作:

分叉项目将对品牌产品进行一些初步更改.我不想与原始项目共享这些更改,但是我希望合并更改.

我们设置它的方式是单独的repos,它们现在具有相同的历史记录,只需为彼此添加遥控器.

我想到的工作流程如下:

我们应该尝试使用功能分支,每个功能只有1个提交,这样我们每个人都可以选择.无论何时处理某个功能并进行提交,只需在该功能的分支中执行git commit --amend.当它最终确定时,我可以挑选提交.

我不喜欢这个,因为如果在挑选樱桃之后功能发生变化,开发人员需要记住不会结束但是创建一个新的提交.

我希望通过合并或rebase来做到这一点.

git merge

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

从Git存储库拆分子目录并保留子目录_now_中所有文件的历史记录

也许已经有了一个解决方案,但其他问题/答案似乎解决了稍微不同的问题(或者我真的不理解它们).

我的目的是分离Git存储库的子目录并使其成为一个独立的存储库,同时保持历史记录不变,但只保留子目录的历史记录. 这个问题首先似乎可以解决问题,但后来我发现了一个缺陷:

git filter-branch --subdirectory-filter仅保留与给定子目录相关的提交.但是,这意味着提交消除它的影响是在子目录的文件,现在不过从其他地点已经搬到那里.

我注意到了这一点,因为我的'清理'存储库的第一次提交是'将所有内容移动到子目录X'.这意味着我的文件之前已经在另一个位置,但是从那时起的提交没有被保留.

所以我需要的是一个命令(或命令序列):

  • 删除存储库中的所有提交
  • 除了包含文件的提交
    • 现在或在给定的子目录中
    • 是其他位置的这些文件的先前版本.

B)
这些提交中的某些提交还可能包含与这些条件不匹配的文件.如果这些文件可以从存储库中完全修剪,这将是一个不错的附加组件.


编辑:

上面链接的解决方案将新存储库中的subdir内容拉到repo的根目录.正如@Amber指出的那样,这会导致已经存在于根目录中的文件出现问题.所以我想要实现的是:

原始目录结构:

\Old-Repo
    \.git
    \ABC
    |- dir content
    \DEF
    |- dir content
    \GHI
    |- dir content
Run Code Online (Sandbox Code Playgroud)

分离存储库的目录结构应该是:

\New-Repo-DEF
    \.git
    \DEF
    |- dir content
Run Code Online (Sandbox Code Playgroud)

并不是:

\New-Repo-DEF
    \.git
    content of old DEF subdirectory
Run Code Online (Sandbox Code Playgroud)

然后我会通过常规提交将内容从DEF子目录移动到根目录.

git git-filter-branch

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

如何在两个中删除一个git存储库?

我有一个git存储库,它有几个提交到不同的子目录,我想以下面的方式将存储库切成两个:

/
  sub1/
  sub2/
  sub3/
Run Code Online (Sandbox Code Playgroud)

->

/
  sub1/
Run Code Online (Sandbox Code Playgroud)

个别潜艇已发展到sub1应该是独立存储库的地步.此外,没有一个提交触及多个子.

因此,我想以某种方式提取一个新的存储库,该存储库只接受提交,sub1同时保留所有其他内容.但我想保留历史记录(但没有相关的提交sub2也没有sub3).

注意:我依稀记得有一些命令可以做到这一点,但我自己从未使用它,也不记得它被称为什么,所以我无法搜索它.

git

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

子目录中的Git子模块?

假设我有两个git回购.RepoA是一个应该在其他项目中共享的通用回购.ReopB是一些需要访问RepoA中的东西的项目.

RepoA

https://.../RepoA
    /Something
    /Source
        /Project1
        /Project2
        ...
        /ProjectN
Run Code Online (Sandbox Code Playgroud)

RepoB

https://.../RepoB
    /SomethingElse
    /Source
        /MainProject
        /RepoA
            /Project1  #Submodule of RepoA at /Source/Project1
Run Code Online (Sandbox Code Playgroud)

使用上面的图解,您可以看到我要做的是配置一个不是RepoA根目录的子模块,而是配置回购中的特定路径.在这种情况下,我想将RepoB/Source/RepoA/Project1映射到RepoA/Source/Project1.

我做了一些研究,似乎并不是直截了当,也可能是不可能做到这一点.我希望我错了!

我们正在从SVN迁移到GIT,在SVN中,我们使用Externals轻松完成此任务.

注意

我也愿意重组RepoA.但我想保持主体结构.例如,如果我能以某种方式在RepoA/Source/...内分支每个项目,但我不希望这变得复杂.

git git-submodules

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

将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存储库的子文件夹上的远程源?

我有一个git存储库,它使用Vagrant为WordPress项目构建虚拟服务器(仅限本地开发).文件夹结构大致如下(出于问题的目的).

- Vagrantfile
- puppet/
- wordpress/
    - {www public folder / root Wordpress files}
- files/
Run Code Online (Sandbox Code Playgroud)

现在所有这些文件都在我的存储库的根目录中,我希望它们留在那里,所以如果我需要向Vagrant添加任何更新,它们将被添加到repo中.现在,我的主机能够通过使用git直接推送更新来允许我部署到我的登台和生产服务器.但是这些文件存储在/ wordpress /中,其服务器上的源是根.理想情况下,我只想从/ wordpress /文件夹推送到远程源的根目录.

我想将/ wordpress /文件夹移动到项目的根目录,然后将所有Vagrant文​​件推送到生产服务器(除非有办法添加特定于远程源的.gitignore).

我确信有几种方法可以实现这一点,我也查看了git子树,但对于这个具体问题看起来有点过分.如果有人能提出最佳解决方案,我们将不胜感激.

git wordpress github subtree vagrant

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