git 명령을 사용하여 폴더를 다른 폴더로 이동
가 폴더를 .common
여러 개의 소스 파일과 폴더가 있습니다.
이제 이동하고 싶습니다.common
폴더를 에 추가합니다.include
▁like▁so▁folder폴더처럼 보이게 를.include/common
시도해 봤습니다.
git add include
git mv common/ include/
하지만 이 오류로 인해 실패합니다.
치명적: 잘못된 소스, source=myrepo/common, destination=myrepo/common
나는 노력했다.
git mv common/ include/common
하지만 같은 오류가 발생합니다.
어떻게 해야 할지 생각나세요?
Git의 가장 좋은 점 중 하나는 파일 이름을 명시적으로 추적할 필요가 없다는 것입니다.Git는 파일의 내용을 비교함으로써 그것을 알아낼 것입니다.
그러니, 당신의 경우, 너무 열심히 일하지 마세요: 참조: Gitmv docs.
$ mkdir include
$ git mv common include
$ git rm -r common
$ git add include/common
중입니다.git status
다음과 같은 것을 보여줘야 합니다.
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: common/file.txt -> include/common/file.txt
#
git mv common include
작동해야 합니다.
맨 페이지에서:
git mv [-f] [-n] [-k] <source> ... <destination directory>
두 번째 양식에서 마지막 인수는 기존 디렉터리여야 합니다. 지정된 원본이 이 디렉터리로 이동됩니다.
완료 후 인덱스가 업데이트되지만 변경 내용은 커밋되어야 합니다.
아니요"git add
이동하기 전에 완료해야 합니다.
"참고: "git mv A B/
때에B
디렉터리로 존재하지 않습니다. 오류가 발생해야 하지만 발생하지 않았습니다.
Git 1.9/2.0(2014년 1분기)은 Mattieu Moy()moy
의 commit c57f628을 참조하십시오.
슬래시를때로, 를 '후행슬래트와명고'와하게 만듭니다.
git mv file no-such-dir
을 입니다.no-such-dir
(후행 슬래시는 디렉토리만 될 수 있다고 명시적으로 명시했습니다.)이 패치는 대상 경로에 대한 후행 슬래시 제거를 건너뜁니다.
후행 슬래시가 있는 경로는 이름 변경(2)으로 전달되며, 해당 메시지와 함께 오류가 발생합니다.
$ git mv file no-such-dir/
fatal: renaming 'file' failed: Not a directory
명령:
$ git mv oldFolderName newFolderName
보통은 잘 작동합니다.
source 후 에 일부 을 나타냅니다. 따라서 "bad source...""는 일반적으로 마지막 커밋 후 소스 디렉토리에 일부 이름이 변경되었음을 나타냅니다.git mv
필요한 파일을 찾을 수 없습니다.
적용하기 만 하면 됩니다. 적용하기 전에 커밋만 하면 됩니다.git mv
.
실행하기 전에 모든 변경 사항을 준비 영역에 추가했는지 확인하십시오.
git mv oldFolderName newFoldername
git가 오류로 실패합니다.
fatal: bad source, source=oldFolderName/somepath/somefile.foo, destination=newFolderName/somepath/somefile.foo
만약 추가되지 않은 파일이 있다면, 저는 방금 알게 되었습니다.
"안드레 얀 택"의 "답변"에 대해 언급할 만큼 충분한 평판이 없어서 죄송합니다.
저는 제 메시지가 삭제될 것이라고 생각합니다((하지만 저는 "lursher"와 같은 오류를 얻은 다른 사람들에게 경고하고 싶을 뿐입니다: 조심하세요.
$ mkdir include
$ mv common include
$ git rm -r common
$ git add include/common
새 폴더에서 프로젝트의 Git 내역이 표시되지 않을 수 있습니다.
노력했습니다
$ git mv oldFolderName newFolderName
얻었다
fatal: bad source, source=oldFolderName/somepath/__init__.py, dest
ination=ESWProj_Base/ESWProj_DebugControlsMenu/somepath/__init__.py
했다
git rm -r oldFolderName
그리고.
git add newFolderName
그리고 제 프로젝트에서 오래된 깃의 역사를 볼 수 없습니다.적어도 내 프로젝트는 잃지 않았습니다.이제 새 FolderName에 프로젝트가 있지만 기록은 없습니다.
만약 당신이 당신의 기지를 잃고 싶지 않다면, "Andres Jaan Tack"의 조언을 사용하여 경고하고 싶습니다.
가 있었어요.git mv
폴더로 스크립트가 .
pushd common; for f in $(git ls-files); do newdir="../include/$(dirname $f)"; mkdir -p $newdir; git mv $f $newdir/$(basename "$f"); done; popd
설명.
git ls-files
모든 파일 찾기(에서)common
folder를 gitfolder에 . gitfolder)를 참조하십시오.newdir="../include/$(dirname $f)"; mkdir -p $newdir;
내부에 새 폴더 만들기include
디렉토리 가 동한디구가폴더와 한 폴더common
git mv $f $newdir/$(basename "$f")
새로 만든 폴더로 파일 이동
는 git가 폴더로 을 이동하는 데 가 있는 것 , 하기 때문입니다.mkdir -p
).
이 접근 방식의 좋은 점은 이미 git에 체크인된 파일만 터치한다는 것입니다.사용만 하면 됩니다.git mv
폴더 전체를 이동하고 폴더에 준비되지 않은 변경 사항이 포함되어 있으면 git는 무엇을 해야 할지 알 수 없습니다.
파일을 이동한 후 저장소를 정리하여 준비되지 않은 나머지 변경 사항을 제거해야 할 수도 있습니다. 먼저 임시 실행하는 것을 기억하십시오.
git clean -fd -n
디렉터리의 모든 파일을 하위 디렉터리로 이동하는 다른 방법(git history 유지):
$ for file in $(ls | grep -v 'subDir'); do git mv $file subDir; done;
이 스크립트를 사용할 수 있습니다.
# 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는 @Andres가 제안한 대로 작업을 스테이징한 후 삭제 및 생성 대신 이동했음을 알게 됩니다. 그러나 에릭 카플룬이 지적했듯이 너무 많은 수정을 하면 명시적입니다.git mv
도움이 될 수 있습니다.
일부 응용 프로그램에서는 단계가 사용되지 않습니다.
GitHub Desktop과 같은 일부 GUI Git 도구는 스테이지에 직접 액세스할 수 없습니다. 수정 사항을 선택하거나 선택 취소할 수 있지만 기본 Git 스테이지는 수정하지 않습니다.변경 사항을 스테이징하려면 명령줄 도구나 정품 GIT GUI와 같은 보다 강력한 GIT 도구를 사용해야 합니다. 그러면 GitHub Desktop에서도 작업 이름이 변경된 것으로 표시됩니다.
저도 비슷한 문제가 있었는데, 제가 이동하고자 하는 폴더에 추적하지 않는 파일이 있었습니다.
파일이 있었다고 치자.
a/file1
a/untracked1
b/file2
b/untracked2
폴더로 .subdir
목표는 다음과 같습니다.
subdir/a/file1
subdir/a/untracked1
subdir/b/file2
subdir/b/untracked2
제가 한 일은:
- 새 모든 을 이동했습니다.
mkdir tmpdir && mv a b tmpdir
- 오래된 파일을 체크아웃했습니다.
git checkout a b
- 하고 (되지 않은 파일이 클린 를 새subdir로 했습니다.
mkdir subdir && mv a b subdir
- subdir에서 모든 파일을 추가했습니다. (그래서 Git는 추적된 이전 파일만 추가할 수 있었습니다. - 그것은 일종의 것이었습니다.
git add --update
디렉터리 변경 트릭 사용):git add subdir
추적되지 않은 할 수 . - 생성해야 ..gitignore
으)로 표시) git status
이동된 합니다.- 나머지 파일을 tmpdir에서 subdir로 이동했습니다.
mv tmpdir/* subdir
git status
우리가 사형을 집행한 것 같습니다.git mv
:)
"Bad Source" 오류를 즉시 수정한 또 다른 중요한 메모:
(누군가가 마주칠 경우를 대비해 실수를 공유할까 생각해서..:))
다음 명령을 실행할 때 Git Console에서 올바른 경로가 선택되었는지 확인합니다.
- git mv Source Destination
필요한 경우 다음을 사용합니다.
- cd SourceFolder
그다음에 mv 명령.
사중인경우를 .GitLab
된 Web-IDE는 및 바꾸기클론 )를 파일 할 수 .
리포지토리 기본 창에서 웹-IDE를 클릭합니다.
폴더를 마우스 오른쪽 단추로 클릭하고 선택합니다.Rename/Move
를 들어 이동(예: 이동)src
foo/bar/src
변경사항은 웹-ide에 표시됩니다.
약속하는 것을 기억하세요!
와 함께Git Tortoise
그것은 매우 쉬워요.
소스를 대상으로 오른쪽 드래그합니다(소스 선택, 마우스 오른쪽 키 유지, 대상으로 드래그, 마우스 해제).
에 「 」 「 」 「 」 「 」가 표시됩니다.Git Move versioned items
그리고.Git Move and rename versioned items
.
물론 깃레포는 현지에서 복제되어야 합니다.
다음을 수행하여 창에서 이 문제를 해결했습니다.
- Power Shell 콘솔 열기
- 달음박질
- Alt를 클릭하여 파일/폴더 이름 열 위로 끌어다 놓은 다음 복사
- 메모장에 붙여넣기++
- regex 파일: replace regex를 사용하여 합니다.
(.*)
와 함께git mv ".\\\1" ".\\<New_Folder_Here>\"
- 메모장의 모든 텍스트를 파워셸로 복사
- 엔터를 치다
저는 <new_folder>의 작업 디렉토리에 있는 동안 mv <parent_folder/folder_to_move> <new_folder> 명령을 사용하여 이 문제를 해결했습니다.이 명령어는 <folder_to_move>의 이름을 <new_folder> 이름으로 변경합니다.그런 다음 mv <new_folder>(이전의 <folder_to_move>) <new_name_of_folder>를 사용하여 대상 폴더의 이름(folder_to_move)을 변경할 수 있습니다.
mv <new_folder> <new_name_of_folder>
언급URL : https://stackoverflow.com/questions/3900805/git-command-to-move-a-folder-inside-another
'programing' 카테고리의 다른 글
파일 시스템에서 jinja 템플릿을 직접 로드하는 방법 (0) | 2023.06.19 |
---|---|
해시 인덱스와 오름차순 인덱스 간의 Mongodb 성능 차이(순서가 없는 필드에서 해시를 사용하지 않는 이유) (0) | 2023.06.19 |
노드를 사용하여 MariaDB에 데이터를 삽입하는 데 문제가 발생했습니다.제이에스 (0) | 2023.06.19 |
카트 페이지 "WooCommerce"에서 배송 등급의 제로 레이트 값을 표시하는 방법 (0) | 2023.06.19 |
실제(고정/변동 지점) 값을 클램프하는 가장 빠른 방법은 무엇입니까? (0) | 2023.06.14 |