2016-04-04 4 views
2

У меня есть структура каталогов, как например:GIT удаления файлов в папках слинкованы, добавляет их на втором пробеге мерзавца добавить -A

-main 
    -sym-linked-dir 
     some-file.txt 
     some-other-file.bar 
    -sym-linked-dir-2 
     -some-dir 
      some-doubly-nested-file.foo 
    -normal-folder 
     spam.eggs 
     pan.cakes 
     hash.browns 

я не у любого слинкован файлов на всех, просто символические папки.

Позволяет сказать, что я внести изменения в spam.eggs, я затем перейти в командную строку и сделать git add -A - мерзавец будет работать в нормальном режиме, но сказать, что все файлы в папках слинкован будут помечены как удаленные:

Changes to be committed: 
    (use "git reset HEAD <file>..." to unstage) 

    deleted: main/sym-linked-dir/some-file.txt 
    deleted: main/sym-linked-dir/some-other-file.bar 
    deleted: main/sym-linked-dir-2/some-dir/some-doubly-nested-file.foo 
    modified: main/normal-folder/spam.eggs 

Untracked files: 
    (use "git add <file>..." to include in what will be committed) 

    main/sym-linked-dir/ 
    main/sym-linked-dir-2 

Когда я снова запустил git add -A или git add main/sym-linked-dir, он добавит папку и все файлы как обычно, как и ожидалось.

Однако, если я затем запустить ДРУГОЙgit add -A, он будет удалить файлы снова, поочередно.

Например, если бы я сделал git add main/sym-linked-dir, он добавил бы это, и у меня было бы только 1 невосстановленное изменение и 1 удаленный файл + папка. Если я тогда сделаю git add -A, это будет untrackmain/sym-linked-dir, но узнайте еще раз, что он отслеживал sym-linked-dir-2 все время. Я делаю еще git add -A, и ситуация снова меняется!

Мой конфиг для репо (в .git папке) выглядит следующим образом:

[core] 
    repositoryformatversion = 0 
    filemode = false 
    bare = false 
    logallrefupdates = true 
    symlinks = true 
    ignorecase = true 
    hideDotFiles = dotGitOnly 

У меня больше ничего не Релевент в моей глобальной конфигурации.

Мой общий вопрос: Как получить git для надежного лечения файлов в символических папках в виде обычных файлов, для всех целей и задач, чтобы не возникало путаное поведение, такое как приведенное выше?

редактировать:

Мой случай использования является то, что у меня есть модуль, который используется двумя (или более) РЕПО локально, поэтому держать их в курсе друг с другом с последним кодом, я просто символизировал некоторые каталоги в обоих случаях - это означает, что всякий раз, когда я обновляю его в одном репо, он обновляется в любом из других, например

-myAwesomeModules 
    -myModule 
     some-file.txt 

-app1 
    -modules 
     -myModule <points to /myAwesomeModules/myModule> 
      some-file.txt 

-app2 
    -modules 
     -myModule <also points to /myAwesomeModules/myModule> 
      some-file.txt 
+0

Это похоже на ошибку git. Но в отношении вашего общего вопроса это может быть нелегко. Git хочет отслеживать символические ссылки явно, а не следовать им. –

+0

Какая версия 'git' на какой платформе? – TriskalJM

+0

@TriskalJM '' 'git version 1.9.5.msysgit.1''' на Windows 10 –

ответ

0

После обновления моей версии git до последней версии, похоже, что она не будет содержать ссылки на файлы с символическими ссылками на файлы.

Я размещаю это здесь, чтобы другие могли видеть.

Я использую git version 2.8.1.windows.1

только решение, которое я мог придумать было превратить символические ссылки в стыках вместо используя MKLINK /J в командной строке.

Это превратило папки в ntfs-соединения, которые git счастливо следует и обрабатывает файлы внутри как обычные файлы.

Я лично использовал удобный Link Shell Extension, чтобы сделать это легко.

--- Дополнительная информация ---

Это нормально для моего случая использования, как я только что файлы вне репо, что я хотел включить в несколько операций РЕПО и иметь их обновления друг друга, независимо от того, что другие разработчики проекта.

Это не решение, если вы хотите правильно управлять этими файлами отдельно от своего репо - для этого, я считаю, подмодули будут ответом.

Если вы хотите использовать символические ссылки в другом каталоге, то git, которые отслеживают сами символические ссылки, не файлов, поэтому другим разработчикам проекта придется добавлять эти символические ссылки.

 Смежные вопросы

  • Нет связанных вопросов^_^