2009-09-30 2 views
65

나는 내 repo @ github을 가지고있다. 나는 집에서 일을하고 그것을 github에 밀어 넣었다. 그것은 파일과 디렉토리의 삭제를 포함합니다. 이제 파일과 디렉토리를 삭제하기 전에 코드 복사본을 가진 작업 상자에 있습니다. Git checkout/pull으로 디렉토리가 제거되지 않습니까?

나는 다음 발행 :. 파일이에 있던 디렉토리를
git remote update 
git checkout HEAD 
git pull origin HEAD 

그것은이 가져야하는 모든 파일을 삭제하지만

두 질문 :

  1. 을 한 이유는 디렉토리를 삭제하지 않습니까?
  2. git 명령을 사용하여 현재 상태에서 제거 할 수 있습니까?
+0

HEAD를 원하십니까? – innaM

+0

동의 함, git checkout HEAD는 현재 체크 아웃 된 커밋을 가리키는 참조이기 때문에 아무것도 수행하지 않습니다. 두 경우 모두 주인이 될 가능성이 높습니다. – Cascabel

+0

글쎄, HEAD는 빈 디렉토리를 삭제하는 것을 제외하고 실제로 모든 것을 업데이트했습니다. 내가 말했듯이, 나는 새로운 자식이다. – mculp

답변

132

힘내는 디렉토리를 추적하지 않으므로 병합이나 다른 변경으로 인해 비어있는 항목은 제거되지 않습니다. 그러나 git clean -fd을 사용하면 추적 할 수없는 디렉토리를 제거 할 수 있습니다. -fd 플래그는 f 추적되지 않은 파일의 삭제를 의미하고 d 개의 전화 번호부를 의미합니다.

+4

혼란 스럽습니다. 그런 다음 변경 사항을 커밋/푸시했을 때 GitHub 레포에서 디렉토리가 삭제 된 이유는 무엇입니까? – mculp

+1

작업 복사본의 디렉토리에 추적 할 수없는 파일 (숨겨진 추적되지 않은 파일 포함)이있을 수 있으므로 비어있는 것처럼 보일 수 있지만 실제로는 보이지 않을 수 있으므로 Git이 파일을 제거하지 않았습니다. 'git clean'은 물론 가능합니다. – mipadi

+0

명령을 보내 주셔서 감사합니다. 그것은 그들을 청소했다. 그러나, 나는 아직도 커밋/푸시에서 디렉토리를 지우지 만 체크 아웃/풀에서 디렉토리를 삭제 한 이유를 이해하지 못합니다. 디렉토리에는 숨김 파일이나 숨김 파일이 없습니다. – mculp

-1

힘내, 입니다, 당신은 둘 다 빈 디렉토리를 추가 할 수 있습니다 ( git wiki 참조) 현재 디렉토리를 추적하지 않습니다도 빈 결국 디렉토리를 제거 이눔 것입니다. (편집 : 덕분에, 마니, 내가 잘못 했어 당신은 빈 디렉토리를 추가 할 수 없습니다, 그러나 그들의 추적 내용이 삭제 되었기 때문에 자식이 빈 될 디렉토리를 제거합니다 !.)

에 관해서 빈 디렉토리를 제거하는 명령은 운영 체제에 따라 다릅니다. 예를 들어, 당신이 사용할 수있는 Linux의

,

find -depth -type d -empty -exec rmdir {} \; 

그러나,이 모든 빈 디렉토리를 제거합니다!

+1

위키 페이지는 git이 빈 디렉토리를 생성하지 않는다고 말합니다. 그것은 빈 디렉토리를 지우지 않을 것이라고 **하지 않습니다 **. mculp가 원하는 것은 나를 위해 일합니다. – innaM

+0

@janko, 사실, 자식이 나를 위해 완전히 빈 디렉토리를 제거하지 못했습니다. –

2

작업 트리를 변경하는 대부분의 작업 (pull, merge, checkout 등)에서 git은 작업에 의해 비어있는 디렉토리를 제거합니다 (즉, 마지막 파일을 제거함). 당신은 숨기거나 다음 파일을 무시할 경우 자식이 마지막 반드시 그 자식은 수있을 것입니다 의미하지 않는 디렉토리에서 파일을 추적 제거해서, 그래서 완전히 비어 있지 않은 모든 디렉토리를 제거하지 않습니다

자식 해당 디렉토리를 제거하십시오. git은 이것이 에러 조건이라고 생각하지 않으므로 그것에 대해 불평하지 않을 것이다.

+0

내 GitHub 저장소에 디렉토리가 없습니다. 내가 커밋했을 때 디렉토리를 올바르게 제거했습니다. 그러나 체크 아웃/당길 때 파일 만 제거합니다. 디렉토리가 비어 있습니다. -al $ 1! 총 8 drwxr-XR-X 2 mculp의 mculp 4096 9월 23일 15시 43분 ./ drwxr-XR-× 8 mculp의 mculp 4096 9월 30일 10시 51분 ../ – mculp

+1

아니에요 꽤 "HEAD to master"라는 말은 "git checkout master"라고 생각하지만 대부분의 사람들은 "master to switch/checkout master"라고 말할 것입니다. 어쨌든, 자식이 '이미 최신이라고 말했을 때.' 그것은 아무것도하지 않았다는 것을 의미합니다. git은 * 비어있는 디렉토리 만 제거합니다. –

+0

나쁜 표현. 일부 사람들이 의견에서 제안한 것처럼 "HEAD"를 "master"로 변경했습니다. – mculp

1

힘내는 디렉토리, 파일 (경로 포함)을 추적하지 않습니다. 망할 놈이 아직 존재하지 않는다면 그 경로에 대한 모든 디렉토리를 만든다. (차갑다!) 그러나 이 아닌은 경로에 포함 된 모든 파일이 이동되거나 삭제 될 때 그들을 삭제한다.).

솔루션 (당신은/뽑아 일단/병합을 빨리 전달) :

git stash --include-untracked 
git clean -fd 
git stash pop 

당신이하지 stashclean하기 전에, 당신은 (비가 역적) 모든 비 추적 파일을 잃어 버리게된다 경우.

참고 : 무시 된 파일도 모두 정리되므로 빌드 스크립트를 다시 실행하여 프로젝트 메타 데이터를 다시 생성해야 할 수도 있습니다 (예 : ./gradlew eclipse). 이것은 또한 비어 있고 자식 파일의 경로의 일부가 아닌 디렉토리를 삭제합니다.

관련 문제