Git将所有未跟踪的文件和文件夹移出git目录?

时间:2018-01-29 08:11:41

标签: git

我从以前的开发者那里得到了PC。 git中有许多未跟踪的文件和文件夹(> 400)。项目应该在没有它们的情况下工作,但我不想删除或存储它们。也许我以后会有一些用处。

有没有办法将结构移动到git的Backup文件夹?

5 个答案:

答案 0 :(得分:9)

基于this answer,您可以执行以下操作,假设您可以使用bash命令(我猜您可以在git提示符中执行此操作)。

cd $Git_Repo
for file in $(git ls-files --others --exclude-standard); do mkdir -p ../backup/$(dirname $file) ; mv $file ../backup/$file ; done

最后一个命令在所有未跟踪的文件上循环,在备份目标文件夹文件中创建结构(dirname)。它将文件移动到需要的位置。

注意: 如果您有带空格的文件名,则必须在命令期间为{b {3}}指定bash的分隔符IFS。别忘了忘记之后。 该命令变为

cd $Git_Repo
IFS=$'\n'
for file in $(git ls-files --others --exclude-standard); do mkdir -p ../backup/$(dirname $file) ; mv $file ../backup/$file ; done
unset IFS

答案 1 :(得分:2)

rsync -R `git ls-files --others` ../Backup

git ls-files --others列出未跟踪的文件,包括忽略;如果您要排除.gitignore添加--exclude-standard

中列出的文件

rsync -R将列出的文件复制到../Backup目录保留路径中。

完成清理工作后,使用git clean -fd甚至git clean -fdx

答案 2 :(得分:0)

上一个答案可能会复制.gitignore中可能已经存在的内容,但是假设您当前的存储库中只有一些暂存文件,而您只想将它​​们保存在./private这样的位置,则可以执行某些操作这样。

mkdir private/scratch_files_issue123/
rsync $(git status -u -s | awk '{print $2}')
git clean -df # to remove the unstanged files. 

答案 3 :(得分:0)

您可以将这些更改保留到另一个分支作为备份分支,或者可以将这些更改保留在另一个文件夹中,由您自己决定切换到备份分支,但是我不建议为此做一个额外的文件夹。

您不想存储它们,但是要移动这些更改,您需要存储它们,如果您按照以下步骤操作,这些更改将不在您的当前分支中-

在您当前的分支中-

git add . 
git checkout -b backup

通过此操作,您已经移动了backup分支中所有隐藏的更改 在这里提交-

git commit -m "backup"

现在,您在backup分支中进行了所有更改 您可以返回工作/主分支,而无需进行任何更改-

git checkout -b master

答案 4 :(得分:0)

摘自Mark Longair对How to make quick backup of untracked files which I want to delete by git clean?的回答:

以下命令将在您的主目录中创建目录中所有未跟踪(但不忽略)文件的tar归档文件:

git ls-files --others --exclude-standard

如果要使用此技术,请仔细检查-z本身是否会产生您期望的文件列表!

有关此解决方案的一些注意事项可能是按顺序进行的:

  • 我已经使用git ls-files来获取NUL,以-0(零字节)作为文件之间的分隔符,并使用了xargs参数来输出文件列表NUL的值告诉它将NUL视为从标准输入读取的参数之间的分隔符。这是处理文件名可能包含换行符的一种标准技巧,因为Linux上文件名中不允许的唯一两个字节是/xargs
  • 如果您有大量未跟踪的文件,那么tar将多次运行tar命令,因此,我已经告诉r附加文件({{ 1}}),而不是创建新的归档文件(c),否则以后tar的调用将覆盖之前创建的归档文件。