为什么没有" cp -a"还复制并保存所有git文件?

时间:2017-03-31 12:13:17

标签: git copy tar cp

由于某些目录更改,我需要将本地开发目录复制到新位置。这个开发目录使用git同步到外部git仓库。最近有一些新的文件更改未提交并推送到该外部存储库。我希望只是将所有内容复制到一个新目录并继续git&to-ing在我离开的地方。

在原始目录中:

~/original_dir $ git status

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   .idea/misc.xml
    modified:   ...

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    ../README.md
    ...

no changes added to commit (use "git add" and/or "git commit -a")

完成cp -a ~/original_dir ~/new_dir后,我得到:

~/new_dir $ git status

fatal: Not a git repository (or any of the parent directories): .git

检查显示副本的根目录中缺少.git。这非常令人担忧,因为我一直在使用cp -a进行备份。这意味着无法信任cp -a来复制所有内容。 (根据手册页,-a-dR --preserve=all&#34;相同,而且与#34}相同。)

拥有该目录的确切快照的正确cp命令是什么?

注意:使用tar -cf old_dir.tar old_dir然后解压缩,确实会产生一个确切的目录副本,也可用于在您离开时继续执行git操作关闭。

1 个答案:

答案 0 :(得分:0)

感谢OP评论中的链接,我想我找到了两个答案。

(1)显然我的Bash默认关闭了dotglob shell选项,需要

$ shopt 
...
dotglob         off
...

(2)一个非常微妙的技巧是在复制命令中指定一个尾随点,并且目标目录已经存在:

cp -a old_dir/. new_dir/

第二个我还需要测试。