- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们想使用 Git 在我们的网络服务器上部署代码。因此,我们在生产服务器上初始化了一个裸存储库。每当我们发布新版本时,我们都会对网站的 DocumentRoot 执行 git checkout:
git --work-tree=/path/to/webroot/ checkout -f master
在 webroot
的子目录中,有几个文件不被 Git 跟踪(缓存文件、用户上传的文件等)。在执行 checkout 时,Git 当然不能删除这些(到目前为止这部分工作正常)。
但是,Git 也不会删除以前跟踪过但同时已被删除的文件(例如,由于不再需要,它们在开发过程中被删除)。这些文件目前在 checkout
过程中幸存下来,导致“死”文件的数量稳步增加。有没有办法让 Git 在执行 checkout
时删除这些文件?
编辑 - 重现步骤:
# create dirs and repos
cd /base/path
mkdir repo.git
mkdir target
cd repo.git && git init
# create, add and commit two files
touch test1.txt
touch test2.txt
git add test1.txt test2.txt
git commit -m testcommit
# checkout to target directory
git --work-tree=../target checkout master -f
# target directory now contains both files
# remove one file from file system and git repo, commit
rm test2.txt
git rm test2.txt
git commit -m deletecommit
# checkout to target again
git --work-tree=../target checkout master -f
# target still contains both files
最佳答案
However, Git also does not delete files which were previously tracked, but have been removed in the meantime
是的,使用 Git 2.22(2019 年第二季度)和 git checkout --overlay
,确实如此。
“git checkout --no-overlay
”可用于触发一种新模式,用于检查树结构之外的路径,允许与当前索引和工作树中的路径规范匹配但不在树结构中的路径。
参见 commit e92aa0e (2019 年 2 月 4 日),commit 1495ff7 , commit 091e04b (2019 年 1 月 8 日),以及 commit b7033e7 , commit 5160fa0 , commit 6fdc205 , commit 536ec18 , commit b702dd1 , commit a0cc584 (2018 年 12 月 20 日)Thomas Gummerer ( tgummerer
) .
推荐人:Jonathan Nieder ( artagnon
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit 7d0c1f4 ,2019 年 3 月 7 日)
checkout
: introduce--{,no-}overlay
option
Currently '
git checkout
' is defined as an overlay operation, whichmeans that if in 'git checkout <tree-ish> -- [<pathspec>]
' we have anentry in the index that matches<pathspec>
, but that doesn't exist in<tree-ish>
, that entry will not be removed from the index or theworking tree.
Introduce a new
--{,no-}overlay
option, which allows using 'git checkout
' in non-overlay mode, thus removing files from the working tree if they do not exist in<tree-ish>
but match<pathspec>
.
Note that '
git checkout -p <tree-ish> -- [<pathspec>]
' already worksthis way, so no changes are needed for the patch mode.
We disallow 'git checkout --overlay -p
' to avoid confusing users who would expectto be able to force overlay mode in 'git checkout -p
' this way.
Untracked files are not affected by this change, so 'git checkout --no-overlay HEAD -- untracked' will not remove untracked from the working tree.
This is so e.g. 'git checkout --no-overlay HEAD -- dir/
' doesn't delete all untracked files indir/
, but rather just resets the state of files that are known to git.
你有一个 new git config
setting :
checkout.overlayMode:
In the default overlay mode,
git checkout
never removes files from the index or the working tree.
When settingcheckout.overlayMode
to false, files that appear in the index and working tree, but not in<tree-ish>
are removed, to make them match<tree-ish>
exactly.
带有通配符路径规范的“`git restore/checkout --no-overlay”错误地删除了子目录中的匹配路径,该问题已在 Git 2.29(2020 年第 4 季度)中得到纠正。
参见 commit bfda204 (2020 年 8 月 22 日)René Scharfe ( rscharfe
) .
(由 Junio C Hamano -- gitster
-- merge 于 commit c57afd7 ,2020 年 8 月 31 日)
checkout, restore
: make pathspec recursiveReported-by: Sergii Shkarnikov
Initial-test-by: Sergii Shkarnikov
Helped-by: Jeff King
Signed-off-by: René Scharfe
The pathspec given to
git checkout
andgit restore
(man) and is used with bothtree_entry_interesting
(viaread_tree_recursive)
andmatch_pathspec
(viace_path_match)
.The latter effectively only supports recursive matching regardless of the value of the pathspec flag "recursive", which is unset here.
That causes different match results for pathspecs with wildcards, and can lead checkout and restore in no-overlay mode to remove entries instead of modifying them.
Enable recursive matching for both checkout and restore to make matching consistent.
Setting the flag in
checkout_main()
technically also affectsgit switch
(man), but since that command doesn't accept pathspecs at all this has no actual consequence.
关于Git checkout 到外部工作树并删除已删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076608/
当我这样做时 git checkout origin/bugfix/NTP-183-datefns git 显示 Note: checking out 'origin/bugfix/NTP-183-d
我刚收到一封来自 Google 的电子邮件,通知我他们将关闭 Google Checkout,我应该改用 Google 电子钱包。这让我感到困惑,因为我在 6 个月前开始使用 Google 数字商品购
SVN 仓库看起来像这样: 最佳/ 最佳 顶部/两个 前/三 ...等等 您不想结帐整个 顶部 文件夹,但您不知道 SVN's sparse checkout feature . 所以你 checko
在稀疏 checkout 场景中,命令 git checkout . 恢复应该忽略的目录。这是设计使然,还是 Git 中的潜在问题?我正在使用 git checkout . 放弃我对我的工作副本所做的
新手问题,我想确保我理解这一点。 当我 git checkout ,这会将整个项目返回到当时的状态,还是仅重新创建在该特定修订版中更改的文件? 例如:如果我的文件夹除了 .git 存储库之外完全是空
我正在使用 Stripe 支付与我的系统集成。但是我不明白这两个库之间的区别。 似乎使用 javascript 生成表单并将 token 传递到我们的服务器端。 这是与 .net 核心一起使用
我正在使用 GitHub Actions 和安装在 Windows 2019 服务器上的自托管代理设置 CI/CD 管道。 我面临的问题是操作 actions/checkout@v2 无法 check
有时是 git checkout命令给出进度反馈: $ git checkout develop Checking out files: 100% (10779/10779), done. Switc
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
我有一个我喜欢的 checkout 后 Hook - 大多数时候 - 但有时我知道运行它会浪费时间,或者,因为它会删除并重建我的开发数据库,所以我不'希望它做它的事情。 是否有跳过钩子(Hook)
这个问题在这里已经有了答案: Why do we use double dash in "git checkout -- ."? [duplicate] (1 个回答) 关闭 5 年前。 我总是使用
我尝试 checkin 有关我的开发的 excel 文档。但是我的构建失败了,因为它的文件被我锁定了。但问题是;当我选择解锁文档时,出现以下错误。 > The item $/../../Device
通过 XML API,如何将 Google Checkout 回调序列号与原始订单相关联? 在同一行 - XML API doc 的“选项 B - 提交服务器到服务器结帐 API 请求”部分中的序列号
我想确保没有其他人正在检查源代码,以便我可以制作发布的安装程序。所以,我想看看 1) #1正在 check out 特定文件的用户列表和 2) #2所有 checkout 文件的列表;但我不知道该怎么
我正在使用 Google Checkout 制作购物车。我已经像下面这样集成了 Paypal: " /
tl;dr JGit 的 checkout 抛出异常,而命令行 git checkout 工作正常 我目前正在尝试使用 JGit 从在线 Git 存储库中检查某些修订版,使用 Java(用于工作)。我
在使用“git checkout”时,我对这两个选项感到有点困惑 我总是使用 git checkout -- . 来清除我的工作目录。 但今天当我错误地输入 git checkout - . 时。我没
最近我使用了 Google Checkout a.k.a Google Wallet。我的任务是让它作为付款方式步骤中的选项单页结账。 我的 Mangento 版本是 CE 1.6.2.0 默认情况下
最近我使用了 Google Checkout a.k.a Google Wallet。我的任务是让它作为付款方式步骤中的选项单页结账。 我的 Mangento 版本是 CE 1.6.2.0 默认情况下
git checkout - check out 先前 check out 的提交引用。这些信息存储在哪里,是否有类似的方法来访问任何第 n 个以前 checkout 的提交? 我希望能够查看我已 c
我是一名优秀的程序员,十分优秀!