programing

git 명령을 사용하여 폴더를 다른 폴더로 이동

telecom 2023. 6. 19. 21:07
반응형

git 명령을 사용하여 폴더를 다른 폴더로 이동

가 폴더를 .common여러 개의 소스 파일과 폴더가 있습니다.

이제 이동하고 싶습니다.common폴더를 에 추가합니다.include▁like▁so▁folder폴더처럼 보이게 를.include/common

시도해 봤습니다.

  1. git add include

  2. git mv common/ include/

    하지만 이 오류로 인해 실패합니다.

    치명적: 잘못된 소스, source=myrepo/common, destination=myrepo/common

  3. 나는 노력했다.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모든 파일 찾기(에서)commonfolder를 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를 클릭합니다.

enter image description here

폴더를 마우스 오른쪽 단추로 클릭하고 선택합니다.Rename/Move를 들어 이동(예: 이동)srcfoo/bar/src 변경사항은 웹-ide에 표시됩니다.

약속하는 것을 기억하세요!

enter image description here

와 함께Git Tortoise그것은 매우 쉬워요.

소스를 대상으로 오른쪽 드래그합니다(소스 선택, 마우스 오른쪽 키 유지, 대상으로 드래그, 마우스 해제).

에 「 」 「 」 「 」 「 」가 표시됩니다.Git Move versioned items그리고.Git Move and rename versioned items.

물론 깃레포는 현지에서 복제되어야 합니다.

Git move with git tortoise

다음을 수행하여 창에서 이 문제를 해결했습니다.

  • 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

반응형