在vagrant中共享一个文件

时间:2015-04-01 15:31:29

标签: vagrant vagrantfile

如何共享单个文件,而不是共享整个文件夹,如

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

换句话说,有一种方法可以使用:

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

5 个答案:

答案 0 :(得分:4)

您可以使用file配置程序执行此操作:

Vagrant.configure("2") do |config|
  # ... other configuration

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

您无法同步单个文件。但也许你可以通过使用RSync同步文件夹和rsync__exclude选项来达到同样的效果:

  

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

默认情况下,Vagrant利用提供商技术(例如,VirtualBox,VMWare等)提供的文件/文件夹同步机制。如果提供程序无法基于每个文件进行同步,那么Vagrant也不能。 Vagrant还可以使用NFSRSyncSMB进行文件同步。但是,looking at the code,似乎每个人都需要每个文件夹的范例。

另一种可能性是使用provisioning选项之一来有选择地同步相应的文件。如果您想轻松一点,可以使用shell provisioner复制所需的文件。对于更有趣的内容,this是在Vagrant中开始使用Puppet的合理指南,您可能对木偶file Type感兴趣。

答案 3 :(得分:1)

接受的答案(通过cdmo)对我不起作用,但是接近并引导我找到正确的解决方案,所以欢呼。要复制一个文件,我需要将其更改为:

config.vm.synced_folder "c:/hostpath/", "/guestpath/", type: "rsync",
  rsync__args: ["-r", "--include=file.text", "--exclude=*"]

请注意参数及其顺序, -r 必须存在且 - 包括必须先于 - 排除

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

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

答案 4 :(得分:0)

作为Benjamin Mosior explained,您只能同步整个文件夹。

作为一种解决方法,我最终将整个文件夹同步到一个临时文件夹,并在稍后的步骤中创建一个符号链接,我需要它到这个临时文件夹中的单个文件。