RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1604224
Accepted
Jarry Roxwell
Jarry Roxwell
Asked:2025-01-07 00:12:43 +0000 UTC2025-01-07 00:12:43 +0000 UTC 2025-01-07 00:12:43 +0000 UTC

合并分支并从存储库中提取项目配置历史记录时忽略文件

  • 772

有一个带有存储库的项目,其中提交中有配置。我创建了一个分支,dev更改了配置,添加了一个不需要的沙箱文件夹(.sandbox)master。

.sandbox实际的问题是,是否可以在不涉及配置文件和我的文件夹的情况下执行合并?

正如我现在所做的:git merge --no-commit --no-ff我手工扔掉配置.sandbox,然后制作漫画。所以每次......我都用 .gitattribute 来查看path/file merge=ours,但在配置的情况下它们master不会改变,没有合并冲突,驱动程序不起作用。 .gitignore 到文件夹.sandbox也不是一个选项;在分支中dev我想跟踪我在那里更改的内容。我也尝试过使用git update-index --skip-worktree $file,它在合并时很有帮助,但dev我也没有看到分支有任何变化。

git
  • 1 1 个回答
  • 60 Views

1 个回答

  • Voted
  1. Best Answer
    Jarry Roxwell
    2025-01-10T15:59:04Z2025-01-10T15:59:04Z

    我听了@user7860670的建议

    将配置存储在单独的存储库中。

    我从主存储库中提取了配置。为开发版本创建了一个分支

    存储库

    项目位于路径/home/myproject, configs - /home/myproject/conf
    需要做什么。检索配置更改的历史记录。从配置中清除主存储库的历史记录。

    我使用了filter-repo。

    • 从git下载git-filter-repo ( :home$ ) wget https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo
    • 已安装(可以在系统中安装,但我是用alis安装的)
    # .git/config
    
    [alias]
      filter-repo = !python3 /home/git-filter-repo
    

    历史提取

    对于配置文件,平面存储库非常合适(就我而言)。创建它、导航它、提取历史记录。

    1. :myproject$ git clone --bare ./.git ./conf.git (你可以忽略它,也可以将它放在项目之外)
    2. :conf.git$ git filter-repo --path conf/ --path-rename conf/: (也可以是单独的文件--path conf/1.conf --path-rename conf/1.conf:1.conf --path conf/2.conf --path-rename conf/2.conf:2.conf)

    准备好。检查:conf.git$ git log

    清除历史记录

    我从主存储库中删除了所有配置痕迹(添加到.gitignore),检查后推送到远程存储库。

    以防万一 :myproject$ tar -cf git.tar .git - 不要忘记在最后删除它。

    1. :我的项目$ git filter-repo --path conf --invert-paths
    2. :我的项目$ git log
    3. :我的项目$ git push --force origin master

    准备好。只有在一切正常之后 :myproject$ rm git.tar

    使用 cofig

    是的,更乏味,但一切都很安全(配置不是我更改的最常见的事情,第一次部署项目时,第二次部署开发版本时)
    我创建了一个存储库,连接了一个远程存储库。

    1. :家$ git init /home/myproject.conf && cd myproject.conf
    2. :myproject.conf$ git remote add origin /home/myproject/conf.git

    准备好。我采取了所需的分支:myproject.conf$ git pull origin master,更改了一些内容并将其推回。

    如何获取工作项目中的文件?有两个选项,第一个是复制(为什么还要费心使用远程存储库?为了跟踪更改),第二个是将带有配置的存储库连接到主存储库。

    选项 2(您不需要在产品中执行此操作,只需在开发中执行此操作):

    1. :我的项目$ git remote add conf-repo /home/myproject/conf.git
    2. :我的项目$ git fetch conf-repo
    3. :我的项目$ git checkout -b temp-branch conf-repo/master

    开发版本分支

    事实证明这对我的项目来说很舒服

    需要一个单独的分支来仅对原始版本的文件进行更改,以便以后在合并时可以方便地使用它们。

    • 大师- 一切出售
    • dev-preset - 以下是不应提交给master 的更改
    • 工作流程- 如果需要的话,它的开发分支已经可以分支并从它合并到主控中

    如果某些内容发生更改/添加到开发预设中,我会将其合并到工作流程中

    新功能已准备好上传到master:

    • git checkout master
    • git merge workflow --no-ff --no-commit

    当然,在 git satus 中, dev-preset会有更改-它只会显示此分支中的更改,该更改将返回到mastergit diff --name-only dev-preset master | xargs git status中的状态


    查看并检查所有内容更安全,但您可以简化dev-out.sh

    git diff --name-status dev-preset master | while read status file; do
      # знаю про resore, но доставшийся мне проект старенький
      git reset -- "$file"
      if [ "$status" = "M" ]; then
        git checkout -- "$file"
      elif [ "$status" = "A" ]; then
        git clean -f "$file"
      elif [ "$status" = "D" ]; then
        git clean -f "$file"
      fi
    done
    

    或添加到别名

    [alias]
        dev-out = "!sh -c 'git diff --name-status dev-preset master | while read status file; do git reset -- \"$file\"; [ \"$status\" = \"M\" ] && git checkout -- \"$file\"; [ \"$status\" = \"A\" ] && git clean -f \"$file\"; [ \"$status\" = \"D\" ] && git clean -f \"$file\"; done'"
        dev-view = !git diff --name-only dev-preset master | xargs git status
    
    • 1

相关问题

  • 在 github Web 界面中添加了一个文件。如何将其上传到本地存储库?

  • 在服务器上安装 Git

  • 如何在 GitHub 上的搜索中与我正在寻找的字符串完全匹配?

  • 有限访问 gitlab 进行 QA

  • 如何查看 GitHub 上所有创建的分支

  • 在 Git 中是否可以更改(而不是删除)整个历史记录中的特定文件

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5