[英]how do I clone files with colons in the filename
当我使用 msysgit 克隆 repo 时,所有文件名中带有空格的文件都不会被删除,然后在状态中显示为已删除。
文件名看起来像这样: styles-ie (1:12:11 6:02 PM).css
所以它实际上可能是冒号或括号?
如何获取这些文件以使我的本地存储库与源内联?
如果你尝试这样做:
touch "styles-ie (1:12:11 6:02 PM).css"
你会看到你不能在 Windows 上创建它。
基本上,repo 具有文件( blob 和树条目),但您无法在 Windows 上结帐,因为 git 将无法创建这样的文件。 没有其他办法,只能更改文件名。
好消息。 从技术上讲,“如何克隆文件名中带有冒号的文件”的答案是简单地使用“git clone”。 幸运的是,只有在 Windows 上(甚至在 msysgit 下)失败的结帐,并且有一个相当干净的解决方法如下所示。
TL; 博士
在 Git Bash 中...
git clone {repo URL}
cd {repo dir}
git ls-tree -r master --name-only | grep -v ":" | xargs git reset HEAD
git commit -m "deleting all files with a colon in the name"
git restore .
... 进而
要深入了解上面列出的几个步骤,请继续阅读......
在使用带有各种文件名的冒号的 repo 时,我能够解决这个问题。 以下对我有用:
$ git clone https://github.com/wdawson/dropwizard-auth-example.git
您应该会看到以下错误,指出克隆成功,但结帐失败。
Cloning into 'dropwizard-auth-example'...
remote: Enumerating objects: 322, done.
remote: Total 322 (delta 0), reused 0 (delta 0), pack-reused 322
Receiving objects: 100% (322/322), 15.00 MiB | 2.88 MiB/s, done.
Resolving deltas: 100% (72/72), done.
error: invalid path 'src/test/resources/revoker/example-ca/certs/root.localhost:9000.cert.pem'
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'
cd dropwizard-auth-example
ls
$ git status
输出...
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: .gitignore
deleted: .travis.yml
deleted: LICENSE
deleted: NOTICE
deleted: README.md
deleted: conf.yml
...
$ git ls-tree -r master --name-only | grep -v ":" | xargs git reset HEAD
输出...
Unstaged changes after reset:
D .gitignore
D .travis.yml
D LICENSE
D NOTICE
D README.md
D conf.yml
D java-cacerts.jks
D pom.xml
D src/main/java/wdawson/samples/dropwizard/UserInfoApplication.java
D src/main/java/wdawson/samples/dropwizard/api/UserInfo.java
D src/main/java/wdawson/samples/dropwizard/auth/OAuth2Authenticator.java
D src/main/java/wdawson/samples/dropwizard/auth/OAuth2Authorizer.java
D src/main/java/wdawson/samples/dropwizard/auth/Role.java
...
$ git status
输出...
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: src/test/resources/revoker/example-ca/certs/root.localhost:9000.cert.pem
deleted: src/test/resources/revoker/example-ca/csr/root.localhost:9000.csr.pem
deleted: src/test/resources/revoker/example-ca/intermediate/certs/intermediate.localhost:9000.cert.pem
deleted: src/test/resources/revoker/example-ca/intermediate/csr/intermediate.localhost:9000.csr.pem
deleted: src/test/resources/revoker/example-ca/intermediate/private/intermediate.localhost:9000.key.pem
deleted: src/test/resources/revoker/example-ca/private/root.localhost:9000.key.pem
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: .gitignore
deleted: .travis.yml
deleted: LICENSE
deleted: NOTICE
deleted: README.md
deleted: conf.yml
deleted: java-cacerts.jks
deleted: pom.xml
git commit -m "deleting all files with a colon in the name"
$ git restore .
$ ls
输出...
conf.yml java-cacerts.jks LICENSE NOTICE pom.xml README.md src
从工作目录中删除有问题的文件后...
PS:以上所有内容都是在 Windows 10 上的 GitBash 中使用 git 版本 2.25.1.windows.1 完成的。 可以使用 Windows 上的 TortoiseGit 通过 GUI 完成类似的步骤。
您可以在 linux 环境中克隆 repo,将其压缩并复制到 windows,然后使用7zip等工具在 windows 上解压缩。 7zip 将用下划线替换冒号,并保留所有 git 信息。 只要该文件不更改,您就可以设置一段时间。 无论如何,这些文件往往不会有太大变化(例如,我有一个中间带有冒号的证书文件)。
这是解决此问题的另一种方法(通过使用 WSL):(Windows 11)
1. 启用虚拟化:
2. 下载并安装 WSL(适用于 Linux 的 Windows 子系统):
在 PowerShell 中:
wsl --install
3. 在 WSL linux 控制台中克隆 repo
安装 WSL 后 - 运行应用程序“WSL” - 将有一个可用的 linux 控制台。 在那个 linux 控制台中 - 像往常一样克隆存储库**。
** 就我而言,我以 root (>sudo su) 身份登录,创建了 ssh 密钥,将公共 ssh 密钥添加到 github 存储库,导航到所需目录并克隆了 ssh 存储库。
因此,通过 WSL 控制台,我可以看到带有“:”的文件。 通过另一个文件管理器、控制台(文件资源管理器、PowerShell、cmd、git CLI)——代替冒号显示不同的符号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.