在Vagrant中共享一个单独的文件

9

我该如何分享单个文件,而不是像分享整个文件夹一样?

config.vm.synced_folder "host/folder", "box/folder"

换句话说,是否有一种方法可以像这样实现:

config.vm.synced_folder "host/folder/file.conf", "box/folder/file.conf"

为什么不共享整个文件夹?或者在主机上有一个只包含一个文件的文件夹? - ydaetskcoR
位置框/文件夹中已经存在其他文件,我不想覆盖它们。我只想“覆盖”单个文件。 - Thorben Croisé
@ydaetskcoR 我也有一个类似的情况:我想编辑 nginx.conf 配置文件,将配置文件保存在我的代码库中,但不导入整个文件夹。 - nha
5个回答

5
接受的答案(由cdmo提供)对我没用,但它接近正确的解决方案,并引导我找到了正确的解决方法,所以感谢。要复制一个文件,我需要将它改为:
config.vm.synced_folder "c:/hostpath/", "/guestpath/", type: "rsync",
  rsync__args: ["-r", "--include=file.text", "--exclude=*"]

请注意参数及其顺序,-r 必须存在,并且 --include 必须在 --exclude 之前。

如果需要,您可以使用 -a 选项代替 -r 选项,该选项将 -r 与其他几个选项结合起来以保留权限、所有权等(请参阅 rsync 帮助)。

我的测试配置:Vagrant 2.0.2/Win10/VirtualBox 5.2.6


感谢您的回答,为了更好地解释它 - 这里是有关rsync所有选项的更好解释:https://linux.die.net/man/1/rsync - domdambrogia
请考虑将第一行更改为:config.vm.synced_folder "/hostpath/", "/guestpath/", type: "rsync",并非每个人都在使用Windows,这可能会引起混淆。 - Jose Paez

4
您可以使用 file provisioner 来完成这个任务:
Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end

5
这并不能保持文件同步,所以它不算真正的“共享”,而是复制。 - Peter Ajtai
我建议将目标更改为“some/absolute/path/to/the/file”,看看是否适用于某些人,现在jedik的答案无疑是最好的(文档完备且有效)。 - Jose Paez
@JosePaez,正如所示的例子是直接来自于我在A'er中链接的文档。当我在2017年尝试时,它对我有效。 - slm

4

在您的rsync args数组中使用include标志:

config.vm.synced_folder "host/folder/", "box/folder/", type: "rsync",
    rsync__args: ["--include=file.conf"]

1
include没有文档记录https://www.vagrantup.com/docs/synced-folders/rsync.html,而且它无法工作。 - fico7489

2
你无法同步单个文件。但是,也许您可以通过使用具有rsync__exclude选项的RSync同步文件夹来实现相同的效果:

rsync__exclude(字符串或字符串数组)-要从同步中排除的文件或目录列表。值可以是任何可接受的rsync排除模式。

默认情况下,Vagrant利用提供程序技术(例如VirtualBox、VMWare等)提供的文件/文件夹同步机制。如果提供程序无法对每个文件进行同步,则Vagrant也无法进行同步。Vagrant还可以使用NFSRSyncSMB进行文件同步。然而,根据代码,似乎每个都期望使用每个文件夹的范例。
另一个可能性是使用其中一个provisioning选项有选择地同步适当的文件。如果您想采取简单的方法,可以使用shell provisioner仅复制所需的文件。对于更有趣的东西,这是一个开始使用Puppet在Vagrant中入门的合理指南,您可能会对puppet file Type感兴趣。

0

正如Benjamin Mosior所解释的那样, 你只能同步整个文件夹。

作为一种解决方法,我最终将整个文件夹同步到一个临时文件夹中,并在后续步骤中创建符号链接,将其指向该临时文件夹中的单个文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接