【问题标题】:How to commit only a specific directory to a remote branch? (deleting all other content)如何仅将特定目录提交到远程分支? (删除所有其他内容)
【发布时间】:2018-08-23 13:27:41
【问题描述】:

我有一个名为 deployment 的分支,我只想将文件夹 dist 的内容推送到我的远程存储库中的这个分支,删除所有其他内容。

我已经试过了

  • --prefix标记git push
  • cd distgit push

观察

  1. 警告说它已经是最新的
  2. Remote 包含所有内容(不仅仅是“dist”文件夹)

如何在我的提交中仅选择 dist/ 文件夹?

【问题讨论】:

  • 我也很困惑你想要做什么。在 Git 中,当您提交时,您会在逻辑上拍摄整个分支的快照,而当您推送时,您会在逻辑上推送整个分支。你为什么要推送单个文件夹的内容?
  • @TimBiegeleisen 正如我的帖子中提到的,我正在尝试推送我编译的文件“dist”文件夹的内容。然后,Plesk Git 扩展连接到该分支并持续镜像我的生产服务器上的所有内容。它基本上是持续部署。我已经尝试了超过 15 个小时,但没有成功——这就是我现在正在尝试的策略。

标签: git deployment bitbucket plesk continuous-deployment


【解决方案1】:

据我了解,你想

仅将特定目录提交到远程分支(删除所有其他内容)

由于deployment 是从包含所有文件的分支创建(分支出来)的,因此您需要删除deployment 分支中不需要的文件。您可以通过以下步骤达到所需的状态:

  1. 拉取最新更改:git reset --hard HEAD; git fetch
  2. 前往您的分行:git checkout deployment
  3. 删除不需要的文件/目录(dist/ 除外):find * -maxdepth 0 -name 'dist' -prune -o -exec rm -rf '{}' ';'
  4. 阶段删除更改:git add .
  5. 提交并推送到远程:git commit -m "Commit message"; git push origin deployment

希望对您有所帮助!

【讨论】:

  • 谢谢 - 不幸的是在第 1 步卡住了。获取PS C:\02 A14 WORK\01 SOFTWARE\AngularTemplate> git checkout deployment error: pathspec 'deployment' did not match any file(s) known to git.
  • 我已经编辑了我的答案以将您的远程存储库的状态拉到本地。如前所述,这只会下载所有最近的更改,但不会更改您当前的工作区域。
  • 谢谢——我今天晚上又有时间试一试。我已经开始掌握逻辑以及结帐的作用/工作原理。现在我唯一的问题是 git 仍然以这种方式将我的所有文件推送到该分支,而不仅仅是 'dist' 的内容。
  • 现在,问题是“dist”的内容已经在遥控器上。尝试创建一个新分支并执行相同的操作。还是只保留这个分支?
  • 我正在使用一个测试存储库,所以我可以尝试一下。我刚刚使用 git checkout -b deployment2 创建了一个新分支,然后继续进行,不幸的是,所有内容都不断被复制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2023-01-12
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2020-09-08
相关资源
最近更新 更多