我创建了一个包含大量源文件和文件夹的文件夹。
现在我想将common文件夹移动到include文件夹中,这样它看起来就像include/common
我试过这些:
Git添加包含 Git mv common/ include/ 但是它会因为这个错误而失败 致命:坏源,源=myrepo/common,目的地=myrepo/include 我尝试了git mv common/ include/common,但我得到了相同的错误
你知道怎么做到吗?
我创建了一个包含大量源文件和文件夹的文件夹。
现在我想将common文件夹移动到include文件夹中,这样它看起来就像include/common
我试过这些:
Git添加包含 Git mv common/ include/ 但是它会因为这个错误而失败 致命:坏源,源=myrepo/common,目的地=myrepo/include 我尝试了git mv common/ include/common,但我得到了相同的错误
你知道怎么做到吗?
当前回答
移动文件并使用git stage
你可以使用你最喜欢的工具(命令行,图形文件资源管理器)移动你的文件,git会发现你做了移动,而不是删除和创建,一旦你执行了你的操作,正如@Andres所建议的,但如果你做了太多的修改,Erik Kaplun指出,显式git mv可以帮助。
在某些应用程序中不使用Stage
一些GUI git工具(如GitHub Desktop)不提供对stage的直接访问:您可以选择和取消选择修改,但它不会修改底层git stage。你需要使用更强大的git工具,如命令行工具或正宗的git GUI来进行更改,然后GitHub Desktop也将显示操作为重命名。
其他回答
我使用这个命令解决了这个问题 Mv <parent_folder/folder_to_move> <new_folder>而在<new_folder>的工作目录。 这个命令的作用是将<folder_to_move>重命名为<new_folder>名称。之后,您可以重命名目标文件夹(folder_to_move)使用mv <new_folder>(以前<folder_to_move>) <new_name_of_folder>
Mv <new_folder> <new_name_of_folder>
您可以使用这个脚本。
# git mv a folder and sub folders in windows
function Move-GitFolder {
param (
$target,
$destination
)
Get-ChildItem $target -recurse |
Where-Object { ! $_.PSIsContainer } |
ForEach-Object {
$fullTargetFolder = [System.IO.Path]::GetFullPath((Join-Path (Get-Location) $target))
$fullDestinationFolder = [System.IO.Path]::GetFullPath((Join-Path (Get-Location) $destination))
$fileDestination = $_.Directory.FullName.Replace($fullTargetFolder.TrimEnd('\'), $fullDestinationFolder.TrimEnd('\'))
New-Item -ItemType Directory -Force -Path $fileDestination | Out-Null
$filePath = Join-Path $fileDestination $_.Name
git mv $_.FullName $filePath
}
}
使用
Move-GitFolder <Target folder> <Destination folder>
与其他解决方案相比,此解决方案的优势在于它递归地移动文件夹和文件,甚至在文件夹结构不存在时创建文件夹结构。
另一个重要的注意,我错过了,并立即修复了“坏源”错误:
我只是想分享我的错误,以防有人遇到。:))
当你运行命令时,确保在git控制台中选择了正确的路径:
- git mv Source Destination
如有需要,请使用:
- cd SourceFolder
然后是mv命令。
如果你使用的是GitLab,它集成的Web-IDE可以用于一些文件管理任务,包括移动和重命名(不需要本地克隆)。
单击存储库主窗口上的Web-IDE。
右键单击文件夹并选择重命名/移动(例如将src移动到foo/bar/src)。这些变化将显示在web ide中。
记得要承诺!
确保在运行之前已将所有更改添加到暂存区域
git mv oldFolderName newFoldername
Git错误失败
fatal: bad source, source=oldFolderName/somepath/somefile.foo, destination=newFolderName/somepath/somefile.foo
是否有任何未添加的文件,所以我才知道。