.git文件夹的奇怪行为

时间:2013-10-12 04:10:21

标签: linux git github

我在远程计算机上克隆了一个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

1 个答案:

答案 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

你应该会发现你把所有东西都复制到你想要的地方。