由于某些目录更改,我需要将本地开发目录复制到新位置。这个开发目录使用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操作关闭。
答案 0 :(得分:0)
感谢OP评论中的链接,我想我找到了两个答案。
(1)显然我的Bash默认关闭了dotglob
shell选项,需要 。
$ shopt
...
dotglob off
...
(2)一个非常微妙的技巧是在复制命令中指定一个尾随点,并且目标目录已经存在:
cp -a old_dir/. new_dir/
第二个我还需要测试。