我在远程计算机上克隆了一个git目录作为用户bob(在转发了本地密钥之后)。当我克隆回购时,回购显示正常,一切都显示出来,包括.git文件夹。
现在,我想将此文件夹复制到另一个恰好是文件夹链接的位置。当我执行cp -r /tmp/tmp.kk3a8xemvr/* /home/staging/myapp
时,所有内容都会被复制,但不会复制.git文件夹。当我在cp
命令中显式调出.git文件夹时,它会被复制。我也注意到.gitignore也没有被复制。
另一个奇怪的行为是当我转到/home/staging/myapp
并且我执行rm -rf ./*
时,.git文件夹不会被删除,除非我专门调用它。
为什么简单的unix命令对.git目录的行为有所不同?它的权限没有什么特别之处。可能是文件前面的句号会导致一些问题吗?
drwxr-xr-x 8 staging staging 4096 Oct 12 03:42 .git/
我的操作系统是Ubuntu 12.04 LTS。
Linux myapp 3.2.0-54-virtual #82-Ubuntu SMP Tue Sep 10 20:31:18 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
修改 为Jonathan提供更多信息:我已更新foldernames以匹配以下命令:
# cd /tmp/tmp.kk3a8xemvr <- source, everything is good here.
root@myapp1:/tmp/tmp.kk3a8xemvr; ls -la
total 48
drwx------ 9 bob bob 4096 Oct 13 03:08 .
drwxrwxrwt 7 root root 4096 Oct 13 14:55 ..
drwxrwxr-x 3 bob bob 4096 Oct 13 03:08 ansible
drwxrwxr-x 4 bob bob 4096 Oct 13 03:08 backend
drwxrwxr-x 3 bob bob 4096 Oct 13 03:08 clientdb
drwxrwxr-x 15 bob bob 4096 Oct 13 03:08 dapi
drwxrwxr-x 3 bob bob 4096 Oct 13 03:08 docs
drwxrwxr-x 3 bob bob 4096 Oct 13 03:08 fabfile
drwxrwxr-x 8 bob bob 4096 Oct 13 03:08 .git
-rw-rw-r-- 1 bob bob 44 Oct 13 03:08 .gitignore
-rw-rw-r-- 1 bob bob 68 Oct 13 03:08 README.md
-rw-rw-r-- 1 bob bob 450 Oct 13 03:08 requirements.txt
# cd /home/staging; ls
lrwxrwxrwx 1 staging staging 62 Oct 13 03:06 myapp -> /srv/www/staging.myapp.com/public_html/myapp/
# command I use:
sudo cp -r /tmp/tmp.kk3a8xemvr/* /home/staging/myapp
# cd /home/staging/myapp; ls -la; # <- this is the intended destination;
# .git and .gitignore are missing after applying the cp command.
drwxr-xr-x 9 staging staging 4096 Oct 13 14:59 .
drwxr-xr-x 3 staging staging 4096 Oct 13 03:06 ..
drwxr-xr-x 3 staging staging 4096 Oct 13 03:08 ansible
drwxr-xr-x 4 staging staging 4096 Oct 13 03:08 backend
drwxrwxr-x 2 staging staging 4096 Oct 13 14:59 clientdb
drwxr-xr-x 15 staging staging 4096 Oct 13 03:09 dapi
drwxr-xr-x 3 staging staging 4096 Oct 13 03:08 docs
drwxr-xr-x 3 staging staging 4096 Oct 13 03:08 fabfile
-rw-r--r-- 1 staging staging 68 Oct 13 03:08 README.md
-rw-r--r-- 1 staging staging 450 Oct 13 03:08 requirements.txt
答案 0 :(得分:2)
如果你这样做:
sudo cp -r /tmp/tmp.kk3a8xemvr/* /home/staging/myapp
shell将*
扩展为“不以.
开头的所有文件或目录名称”(因此省略.git
等)。
如果你这样做:
sudo cp -r /tmp/tmp.kk3a8xemvr /home/staging/myapp
你会得到tmp.kk3a8xemvr
中创建的子目录/home/staging/myapp
,我认为这不是你想要的。
但是,如果你这样做:
sudo cp -r /tmp/tmp.kk3a8xemvr/. /home/staging/myapp
你应该会发现你把所有东西都复制到你想要的地方。