2015-04-01 89 views
2

一個單一的文件如何共享一個單一的文件,而不是像共享分享在遊民

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

整個文件夾?

換句話說就是有辦法有類似:

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

爲什麼不共享整個文件夾?或者在只包含一個文件的主機上有一個文件夾? – ydaetskcoR 2015-04-01 16:53:22

+0

我不想覆蓋位置框/文件夾中已存在其他文件。我只想「覆蓋」單個文件 – 2015-04-02 11:51:57

+0

@ydaetskcoR我還有以下情況:我想編輯'nginx.conf'配置文件,將配置文件保存在我的存儲庫中,但不導入整個文件夾。 – nha 2015-06-30 09:36:41

回答

1

使用include標誌在你的rsync args數組:

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

不能同步單個文件。但是,也許你可以通過同步使用RSyncrsync__exclude選項的文件夾達到同樣的效果:

rsync__exclude(字符串或字符串數​​組) - 文件或目錄的列表,從同步排除。這些值可以是任何可接受的rsync排除模式。

默認情況下,流浪使用由供應商技術(例如,VirtualBox,VMWare等)提供的文件/文件夾同步機制。如果提供者不能以每個文件爲基礎進行同步,那麼Vagrant也不能。流浪者也可以使用NFS,RSyncSMB進行文件同步。然而,looking at the code,它似乎每個人都期望每個文件夾的範例。

另一種可能性是使用provisioning選項之一來選擇性地同步適當的文件。如果你想要簡單的方法,你可以使用shell provisioner來複制你需要的文件。對於更有趣的事情,this是在Vagrant中開始使用Puppet的合理指南,您可能對傀儡file Type感興趣。

0

由於Benjamin Mosior explained,您只能同步整個文件夾。

作爲一種解決方法,我最終將整個文件夾同步到一個臨時文件夾,並在稍後的步驟中創建一個符號鏈接,我需要它到此臨時文件夾中的單個文件。

3

可以使用file供應方要做到這一點:

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

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

接受的答案(由CDMO)對沒有工作我,但很接近,並讓我找到正確的解決方案,所以歡呼。若要複製只有一個文件,我需要將其更改爲:

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

心靈的參數和它們的順序,-r必須提供和--include必須先--exclude

如果需要的,而不是-r選項您可以使用-a選項,它結合了-r與權限的保護,所有權等其他幾個選項(參見rsync的幫助)。

我的測試配置:Vagrant 2.0.2/Win10/VirtualBox 5.2.6