问题标签 [sparse-checkout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
601 浏览

git - 带有接收后脚本的远程 Git sparse-checkout

我正在尝试弄清楚如何执行以下操作(并弄清楚它是否可能)。

我有一个本地 git 存储库,其中包含许多用于各种事物的文件夹,但我希望能够使用 git 将我的网站部署到我的开发服务器,并且实际上只有一个文件夹的内容应该进入远程 webroot(只是文件夹,而不是文件夹本身,这很困难)。我让开发服务器的 git push 进入 Web 可访问文件夹之外的裸仓库,然后我使用接收后脚本将所有工作文件放入 webroot。但是,这会复制所有文件夹,显然我只希望在操作完成后移动一个特定文件夹的内容。

做一些研究,看起来稀疏结账会很合适。更新:我现在让它工作,它只会复制一个特定的文件夹,但我仍然没有让它忽略文件夹本身并只是拉取内容。我认为这与我添加到 .git/info/sparse-checkout 的路径/通配符有关,但我不确定排除目录但不排除其内容的模式是什么。

有没有好的方法来做到这一点?我应该只使用 post-receive 脚本手动复制我想要的目录的内容,而不是尝试直接使用稀疏结帐来完成吗?

我感谢任何人愿意提供的任何帮助。谢谢!

0 投票
1 回答
98 浏览

git - git 将旧存储库的一部分移动到新存储库

我有一个存储库,它在根目录下包含多个目录,例如

我想仅从 a 的内容创建一个新的 git 存储库,同时保留其历史记录。这可能吗?我已经看到了稀疏的结帐,但我不确定如何使用它从子目录创建一个全新的存储库(具有相关历史记录)。

0 投票
1 回答
572 浏览

git - git sparsecheckout - 如何拉入不同的目录

我正在使用 pootle 来允许人们在 PHP Yii 项目中翻译 .po 文件。

一旦翻译者更新了 .po 文件,Pootle 就可以拉取和推送翻译。另外,我们有开发人员在网站上工作,他们也可能会更新翻译文件以添加更多要翻译的文本。

Yii 要求 .po 文件位于:

yii-project/protected/messages/en_gb/messages.po

Pootle 要求目录结构为:

pootle/yii-project/en_GB/messages.po

为了让 pootle 拉和推,.git 目录需要在 pootle/yii-project/.git 中。

我曾尝试使用 git sparse checkout,但这会将文件拉入 pootle/yii-project/protected/messages/en_gb/messages.po 不幸的是 pootle 没有收到。

我无法在其他地方提取存储库然后进行软链接,因为那时 pootle 将无法找到 .git 目录。

我真正想做的是一个目录的稀疏检出并将结果映射到另一个目录,即检出:

pootle/yii-project/protected/messages/ -> pootle/yii-project

我不想使用 git-subtree,因为我希望开发人员或翻译人员能够更新文件。我不想使用子模块,因为我不喜欢额外的拉动开销,我们希望开发人员在一次提交中包含与新功能有关的所有更改(而不是在主项目上的一次提交和一个在子模块上)。

有什么建议么?

0 投票
1 回答
2131 浏览

java - 如何在 JGit 中实现稀疏结帐?

我需要在 Github 存储库中提取特定子目录的内容并将其放在我自己的目录下。经过大量研究,似乎稀疏的结帐是要走的路。但是,我有点不确定,如何使用 JGit 来实现它。

0 投票
2 回答
661 浏览

git - 混帐结帐。添加稀疏结帐排除的目录

在稀疏签出场景中,该命令git checkout .恢复应该被忽略的目录。这是设计使然,还是 Git 中的潜在问题?我git checkout .用来丢弃我对工作副本所做的任何更改——是否有另一个命令可以做同样的事情并且不会遇到这个问题?

这是一个可重现的示例:

到现在为止还挺好。这是问题所在:

顺便一提:

问题为什么排除的文件不断重新出现在我的 git sparse checkout 中?是相关的,但年龄更大,并不能完全描述我所看到的。

0 投票
9 回答
193300 浏览

git - 如何 git reset --hard 一个子目录?

更新²:使用 Git 2.23(2019 年 8 月),有一个新命令git restore可以执行此操作,请参阅接受的答案

更新:从 Git 1.8.3 开始,这将更直观地工作,请参阅我自己的答案

想象以下用例:我想删除 Git 工作树的特定子目录中的所有更改,而保留所有其他子目录不变。

此操作的正确 Git 命令是什么?

下面的脚本说明了这个问题。在注释下方插入正确的命令How to make files——当前命令将恢复a/c/ac应该被稀疏检出排除的文件。请注意,我不想显式恢复a/aand a/b,我只“知道”a并想恢复下面的所有内容。编辑:而且我也不“知道” b,或者哪些其他目录与a.

0 投票
2 回答
290 浏览

git - Git 稀疏检出后工作副本中的目录过多

我们有一个 git repo (远程托管在 github - 我们称之为 Clients repo),根目录中有 210 多个目录。我们有 210 多台 Windows 服务器,每台服务器都需要其中一个根目录,而实际上并不需要其他根目录。

所以我们登录到其中一台服务器,并使用1.8.1.msysgit.1

  1. 从 git hub 克隆客户端 repo
  2. 打开稀疏结帐
  3. 使用我们希望在此服务器工作副本中的单个 *directory/* 更新稀疏签出文件
  4. 执行我们的读树操作

10 次中有 9 次一切正常,并且工作副本包含我们期望的单个目录。

然而,每隔一段时间,它就不会像预期的那样工作,我们也会得到一些其他目录流到工作副本中。它从来都不是完整的 210+,但会在 6-10 个其他目录之间。这些目录与所需目录的模式不匹配,也没有与所述模式匹配的任何子目录。

一旦发生这种情况,我们就永远无法解决本地 repo。我们尝试过:

  • 各种复位
  • 各种读树
  • 禁用/重新启用稀疏结帐
  • 检查日志以查看是否发生了任何奇怪的事情

最终,我们通常最终会删除本地 repo,再次执行相同的步骤,并且它只是第二次工作。

除了重复克隆、设置稀疏签出等之外,我们还没有找到可靠地重现该问题的方法。在这种情况发生的 20 次左右中,它只在非 Windows 机器上发生过一次(我们有一个运行 git v1.8.1.5 的 ubuntu 服务器,两周前显示了同样的问题)。

我的 Google-Fu 在这方面很弱。我希望能深入了解为什么会发生这种情况,以及任何不让我们删除存储库并重新克隆它的潜在解决方法。提前致谢!

0 投票
2 回答
1693 浏览

windows - 为什么 git sparse checkout 会留下目录?

一些背景知识: 我公司的服务模式最初是基于设备的服务器模式。我们将向我们的客户发送一台装有 Windows Server 2003/2008 的服务器,预装了一个网络服务器和我们的软件。我们将所有客户端特定的配置移至 Git 存储库,并使用 sparse-checkout 使每个服务器仅包含客户端软件正常运行所必需的内容。

在设置稀疏结帐时,我们遇到了巨大的不一致。干的好

预期的结果是

但我们得到

我已经尝试了多次,每次都在一个新目录中,每次都出现问题。我的 ju-git-su 在这里失败了。我们使用的是 git 版本 1.8.1.msysgit.1。

感谢您的帮助,如果我需要提供更多信息,请告诉我。

---编辑1---

澄清:存储库只是我们客户的配置目录。每个客户端在存储库中都有一个不同的目录,我们试图在每个客户端的单独服务器上进行稀疏检出,因此我们试图排除除了有问题的客户端之外的所有内容。

---编辑2---

只是一个更新,结果证明它是 Windows 文件夹权限的问题,Git 试图删除非空目录。通过删除空文件夹来修复它。感谢您提供帮助的所有尝试!

0 投票
0 回答
61 浏览

git - multiple git subtrees from multiple repos, offsetting the directory layout

say I have 2 different git repos:

so far I only managed the following (with sparsecheckout):

But I'd really like to be able to assemble them in the following fashion:

and still be able to commit changes in work-repo/dir11 back to repo-1/dir11, ditto for /dir22 and /dir23.

is it possible to achieve such a thing with git-subtree ? (or any other git extension/command)

0 投票
1 回答
386 浏览

c# - 签出后使用空深度更新存储库

我正在使用 SharpSVN。如何将 Checkout 方法逻辑拆分为两个步骤:

  1. 创建一个空的svn文件夹
  2. 更新 HEAD 修订版

这是我如何做SvnDepth.Empty参数的第一步

但是,如果我尝试像这样更新:

我没有更新。svn 服务器上的存储库不为空。

所以问题是:在使用 Empty 深度进行 Checkout 后,如何正确更新到最新版本。