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 .
字符串 然后
下载整个git repo的Zip
在Zip中用冒号重命名文件(不解压缩它们)
只提取那些文件你重命名
将这些重命名的文件添加到工作目录 要深入了解上面列出的几个步骤,请继续阅读.
我能够在使用各种文件名中包含冒号的repo时解决这个问题。以下方法对我有效:
做一个常规的git克隆。
第一个月 您应该看到以下错误,指出克隆成功,但 checkout 失败。
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个
检查git repo工作目录是否完全为空
ls个
运行git-status,发现所有文件都已暂存以待删除
$ 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
...
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
...
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"个
6条答案
按热度按时间shstlldc1#
**好消息。**从技术上讲,“如何克隆文件名中带有冒号的文件”的答案是简单地使用“git clone”。幸运的是,在Windows上只有 checkout 失败(即使在msysgit下),并且有一个相当干净的解决方案,如下所示。
在Git Bash中...
字符串
然后
要深入了解上面列出的几个步骤,请继续阅读.
我能够在使用各种文件名中包含冒号的repo时解决这个问题。以下方法对我有效:
第一个月
您应该看到以下错误,指出克隆成功,但 checkout 失败。
型
cd dropwizard-auth-example
个ls
个$ git status
个输出...
型
$ git ls-tree -r master --name-only | grep -v ":" | xargs git reset HEAD
个输出...
型
$ git status
个输出...
型
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
个一旦你从你的工作目录中删除了违规文件.
附言:以上所有操作都是在Windows 10上的GitBash中使用git版本2.25.1.windows.1完成的。类似的步骤可以在Windows上使用TortoiseGit通过GUI完成。
wsxa1bj12#
如果你尝试做:
字符串
你会发现你不能在Windows上创建它。
基本上,仓库有文件(blob和树条目),但你不能在Windows上 checkout ,因为git无法创建这样的文件。没有其他方法,只能更改文件名。
gr8qqesn3#
你可以在Linux环境下克隆这个仓库,将其压缩并复制到Windows上,然后在Windows上使用7zip之类的工具解压缩。7zip会将冒号替换为下划线,并保留所有的git信息。只要这个文件没有改变,你就可以在一段时间内完成所有的设置。这些文件通常不会有太大的改变(例如,我有一个中间有一个冒号的cert文件)。
cgyqldqp4#
为了支持“使用WSL”或“使用Linux环境”的答案:
使用WSL:(Windows 11)
1.启用虚拟化:
2.下载并安装Linux发行版(如Ubuntu - latest):
3. WSL Linux控制台克隆仓库
在WSL被安装之后-运行应用程序“WSL”-将会有一个可用的Linux控制台。在那个linux控制台中-像你通常做的那样克隆存储库**。
**在我的例子中,我以root身份登录(>sudo su),创建ssh密钥,将公共ssh密钥添加到github repo,导航到所需目录并克隆ssh repo。
因此,通过WSL控制台,我可以看到带有“:“的文件。通过另一个文件管理器,控制台(文件资源管理器,PowerShell,cmd,git CLI)-代替冒号显示不同的符号。
lvjbypge5#
*Windows**下的Purly
字符串
可能也会删除一个实际 checkout 的“path\to\evil\file”(一个没有冒号的版本),提交,推送,(现在你已经可以在windows上 checkout 当前版本了),如果你需要的话,用更好的名字创建一个文件。
**虚拟提示:**将
path\to\evil\file:with.colon
替换为你的邪恶文件路径,相对于项目根目录(但保持!
在它前面,在第3行,例如!/static/icons/some.png:With.Id
)。**识别:**关于@RomanOrekhov被删除的答案(虽然不完整,但由于使用稀疏校验,它被错误地删除为重复,因为没有答案表明明显的路线)。
gcuhipw96#
要添加到RJLyders答案,使用
git ls-tree -r main --name-only | grep -v ":" | xargs -I {} git reset HEAD "{}"
将确保包含空格的文件路径也将被保留。