为什么,因为很难通过来宾中的旧版编辑器来处理和编辑代码。对于开发者来说,流浪者的目的更容易,对吧:)?
因此,我请有人在这种情况下指导我:
虚拟机仓库位于/home/vagrant/src
。
我希望它在主机的../src
中可见/可编辑。
我阅读了文档,并在Vagran文件中推出了这个文档:
config.vm.synced_folder '../src', '/home/vagrant/src'
此“有效”,但它会覆盖/home/vagrant/src
中的所有内容和来自../src
的内容为空的内容。
任何解决方法? 我考虑过通过git克隆repo的可能性(通过github公开获得)并将文件夹同步到VM,但这感觉不对,也失去了生产配置。
答案 0 :(得分:6)
好像你正在寻找双向同步。如果我的理解是正确的,answer会对您有所帮助。请注意,我还没有测试过这些。似乎关键是使用virtualbox
同步type。
type(string) - 同步文件夹的类型。如果没有指定, Vagrant会自动选择最佳的同步文件夹选项 你的环境。否则,您可以指定特定类型,例如 中的 “nfs”。
config.vm.synced_folder '../src', '/home/vagrant/src', type: "virtualbox"
然后再根据this doc,
如果您使用的是Vagrant VirtualBox提供程序,那么VirtualBox 共享文件夹是默认的同步文件夹类型。这些同步了 文件夹使用VirtualBox共享文件夹系统来同步文件更改 从客人到主人,反之亦然。
因此我不确定为什么你的默认类型不是virtualbox。无论如何,这是值得一试的我猜。进一步进入文档似乎是在文档中解释的虚拟框类型中的错误。如果您要使用虚拟盒同步类型,请关注steps here。
答案 1 :(得分:5)
我的Vagrant.configure(2) do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network :forwarded_port, guest: 22, host: 10170, id: "ssh"
config.vm.provision :shell, path: "VagrantProvision.sh"
config.vm.synced_folder "./", "/var/beeGame"
end
看起来像这样:
/home/vagrant/src
正如你在这里看到的,我和你的声明一样! Here my repo(您可以像示例一样尝试),它对我有用!我使用PhpStorm打开这个仓库并自动编辑文件和所有更新,并从我的主机(我的笔记本电脑)同步到客户机(虚拟)。
在你的情况下,你做得很好,并且流浪者必须覆盖../src
中来自src
的所有内容。这是正确的行为!您需要将代码放在主机(您的笔记本电脑)上的ng
目录中,而不是在您的客户机上(虚拟)!
答案 2 :(得分:4)
我已经确定问题不是config.vm.synced_folder '../src', '/home/vagrant/src'
覆盖/ home / vagrant / src。问题是home / vagrant / src成为文件系统中一个新的不同类型的目录,它是空的。因此,只需在设置共享目录后重新填充它。所以......
sudo mv home/vagrant/src home/vagrant/src-back
config.vm.synced_folder '../src', '/home/vagrant/src'
sudo mv home/vagrant/src-back/* home/vagrant/src-back/
事情应该会顺利进行。
答案 3 :(得分:3)
听起来您想要与来自的来宾计算机共享 主机,这与普通共享文件夹相反。
您是否考虑过在客户端上配置NFS,然后使用vagrant-triggers将来自guest虚拟机的共享挂载到主机上。
首先安装vagrant-triggers:
vagrant plugin install vagrant-triggers
然后像这样Vagrantfile
:
# where you want to mount the guest's shared folder on the host
host_mount_dir = "/home/david/vagrant-home"
Vagrant.configure(2) do |config|
config.vm.box = "debian/jessie64"
# forward the NFS port
config.vm.network "forwarded_port", guest: 2049, host: 8049
# configure NFS on guest
config.vm.provision "shell", inline: <<SCRIPT
apt-get install -y nfs-kernel-server nfs-common
host_ip="$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)"
echo "/home/vagrant $host_ip(rw,sync,no_subtree_check)" > /etc/exports
exportfs -a
SCRIPT
# after the machine is up, mount the NFS share
config.trigger.after :up do
# mkake the dir if it doesnt exist
run "mkdir -p " + host_mount_dir
# we need the users pass to mount (make sure you are a sudoer!)'
puts "Please enter your password so that we can run mount"
run "sudo mount -t nfs -o port=8049 localhost:/home/vagrant #{host_mount_dir}"
end
# before halting, unmount the share
config.trigger.before :halt do
# we need the users pass again
puts "Please enter your password so that we can run mount"
run "sudo umount #{host_mount_dir}"
end
end
这是一个不寻常的设置,但我现在使用Ubuntu主机和Debian客户端测试它,它似乎正在工作 - YMMV。
答案 4 :(得分:1)
您可以将rsync
与Vagrant一起使用,它具有内置支持。这是文档的link。虽然rsync
忽略目标上的过多文件(可能是默认行为)是微不足道的,但您仍然可以通过使用protect filter保护目标文件来准确同步。
与安装不同,必须手动触发rsync
。但是,您仍然可以使用Vagrant的rsync-auto
功能记录here进行简单的文件系统监视。
答案 5 :(得分:1)
我使用以下hack来将文件夹从guest虚拟机转发到主机:
ssh_config
$ vagrant ssh-config > ssh_config
rsync
访客文件夹返回给定配置的主机 $ rsync -avH -e "ssh -F ./ssh_config" default:/vagrant/ ./
它对我有用,我希望它适合你!
答案 6 :(得分:0)
我和这种结构的流浪汉一起工作:
Vagrantfile
MyCode.php
和Vagrantfile包含:
config.vm.synced_folder&#34;。&#34;,&#34; / vagrant&#34;
这意味着MyCode.php在/ vagrant文件夹中的vagrant机器内可见。我可以从流浪汉机器(客人)和我的机器(主机)编辑该文件。
答案 7 :(得分:0)
Vagrant具有插件,可帮助在Guest OS和Host OS之间复制文件和文件夹。
安装vagrant-vbguest
和vagrant-scp:
$ vagrant plugin install vagrant-vbguest
$ vagrant plugin install vagrant-scp
要在Vagrant主机和来宾VM之间复制文件或目录,您需要知道来宾VM的ID或名称。
此信息可在以下命令的输出中找到:
$ vagrant global-status
将文件或目录从Vagrant主机复制到来宾VM:
$ vagrant scp <some_local_file_or_dir> <vm_name>:<some_path_on_vm>
将文件或目录从来宾VM复制到Vagrant主机:
$ vagrant scp <vm_name>:<some_file_or_dir_on_vm> <some_local_path>