Utworzyłem folder common
z wieloma plikami źródłowymi i folderami.
Teraz chcę przenieść common
folder do include
folderu, aby wyglądałinclude/common
Próbowałem tych:
git add include
git mv common/ include/
ale zawodzi z tym błędem
fatal: złe źródło, source = myrepo / common, destination = myrepo / include
Próbowałem,
git mv common/ include/common
ale pojawia się ten sam błąd
Masz pomysł, jak to osiągnąć?
git mv
jest równoważna.powinno działać.
Od
git mv
strony man :Przed przeniesieniem
git add
nie należy wykonywać żadnych czynności „ ” .Uwaga: „
git mv A B/
”, gdyB
nie istnieje jako katalog, powinno zostać błędnie wykonane, ale tak się nie stało.Zobacz zatwierdzenie c57f628 przez Matthieu Moy (
moy
) dla Git 1.9 / 2.0 (Q1 2014):źródło
git mv
wygląda na znacznie lepsze podejście!Komenda:
Zwykle działa dobrze.
Błąd „złe źródło ...” zwykle wskazuje, że po ostatnim zatwierdzeniu w katalogu źródłowym były pewne nazwy i dlatego
git mv
nie można znaleźć oczekiwanego pliku.Rozwiązanie jest proste - wystarczy zatwierdzić przed złożeniem wniosku
git mv
.źródło
Przed uruchomieniem upewnij się, że wszystkie zmiany zostały dodane do obszaru pomostowego
git kończy się niepowodzeniem z błędem
jeśli są jakieś nieaddowane pliki, więc właśnie się dowiedziałem.
źródło
Inny sposób przeniesienia wszystkich plików z katalogu do podkatalogu (zachowuje historię git):
$ for file in $(ls | grep -v 'subDir'); do git mv $file subDir; done;
źródło
Miałem podobny problem z tym,
git mv
gdzie chciałem przenieść zawartość jednego folderu do istniejącego folderu i skończyłem na tym „prostym” skrypcie:Wyjaśnienie
git ls-files
: Znajdź wszystkie pliki (wcommon
folderze) zarejestrowane w gitnewdir="../include/$(dirname $f)"; mkdir -p $newdir;
: Utwórz nowy folder winclude
folderze o takiej samej strukturze katalogów jakcommon
git mv $f $newdir/$(basename "$f")
: Przenieś plik do nowo utworzonego folderuPowodem tego jest to, że git wydaje się mieć problemy z przenoszeniem plików do istniejących folderów, a także zawiedzie, jeśli spróbujesz przenieść plik do nieistniejącego folderu (stąd
mkdir -p
).Zaletą tego podejścia jest to, że dotyka on tylko plików, które są już zarejestrowane w git. Po prostu używając
git mv
do przeniesienia całego folderu, który zawiera nieustawione zmiany, git nie będzie wiedział, co zrobić.Po przeniesieniu plików możesz wyczyścić repozytorium, aby usunąć wszelkie pozostałe niestabilne zmiany - pamiętaj tylko, aby najpierw uruchomić na sucho!
źródło
Przepraszam, że nie mam wystarczającej reputacji, aby skomentować „odpowiedź” „Andres Jaan Tack”.
Myślę, że moja wiadomość zostanie usunięta ((ale chcę tylko ostrzec „lurschera” i innych, którzy dostali ten sam błąd: bądź ostrożny, robiąc
Może to spowodować, że nie zobaczysz historii git swojego projektu w nowym folderze.
próbowałem
dostał
Zrobiłem
i
i nie widzę starej historii gitów w moim projekcie. Przynajmniej mój projekt nie jest stracony. Teraz mam swój projekt w newFolderName, ale bez historii (
Po prostu chcę ostrzec, bądź ostrożny, korzystając z rad „Andres Jaan Tack”, jeśli nie chcesz stracić swojego gitarzysty.
źródło
Miałem podobny problem, ale w folderze, który chciałem przenieść, miałem pliki, których nie śledziłem.
powiedzmy, że miałem pliki
Chciałem przenieść tylko śledzone pliki do podfolderu
subdir
, więc celem było:co zrobiłem to:
mkdir tmpdir && mv a b tmpdir
git checkout a b
mkdir subdir && mv a b subdir
git add --update
zmianie katalogu ): (normalnie dodawałoby to nawet nieśledzone pliki - wymagałoby to utworzeniagit add subdir
.gitignore
pliku)git status
pokazuje teraz tylko przeniesione plikimv tmpdir/* subdir
git status
wygląda na to, że wykonaliśmygit mv
:)źródło
Rozwiązałem to w systemie Windows, wykonując następujące czynności:
(.*)
zgit mv ".\\\1" ".\\<New_Folder_Here>\"
źródło