2015-05-04 4 views
0

Я использовал rsync для копирования некоторых важных файлов данных в место резервного копирования, и когда я пытаюсь выполнить все, некоторые из резервных копий git, которые были скопированы, не добавляются.git add. не добавляя некоторые подкаталоги, которые являются git repos.

У меня такое ощущение, что это связано с функцией подмодуля git? Возможно, есть переключатель командной строки, чтобы сказать git, чтобы рассматривать все подкаталоги как обычные папки?

$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# (commit or discard the untracked or modified content in submodules) 
# 
# modified: home/user/dev/ruby/vid_downloader (modified content) 
# modified: home/user/source/htdigest (untracked content) 
# modified: home/user/source/node (untracked content) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

$ git add . 

$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# (commit or discard the untracked or modified content in submodules) 
# 
# modified: home/user/dev/ruby/vid_downloader (modified content) 
# modified: home/user/source/htdigest (untracked content) 
# modified: home/user/source/node (untracked content) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Все те папки, которые не являются совершающие Git репо с изменениями, которые не были совершены в их рабочих каталогах ...

Это часть сценария резервного копирования, так что любой вид cmd линия будет оценена.

+0

вы имели в виду 'мерзавец добавить *'? – Adalee

+0

Я тоже пробовал эту команду, но я обычно использую 'git add .', так как это первое, что я узнал. Я также попробовал «git add home/user/dev/ruby ​​/ vid_downloader». – Ninjaxor

+0

Я не знаю, как вы ожидаете, что это сработает. Если вы перешли в один из этих подкаталогов со своим '.git' и сделали« git status », что бы вы ожидали? Файл не может (AFAIK) быть частью двух git-репозиториев, и, следовательно, 'git add .' исключает их. Вот почему вам нужно будет использовать подмодули или подобное. – abligh

ответ

1

Попробуйте git add -A option в каждом подмодуле. когда используется опция -A, все файлы во всем рабочем дереве обновляются (старые версии Git используются для ограничения обновления текущего каталога и его подкаталогов).

или

Попробуйте мерзавец подмодуль Еогеасп --recursive мерзавец добавить -A и мерзавец подмодуль Еогеасп --recursive мерзавец совершить -m "некоторые значимые сообщения".

0

Похоже, ваш рабочий процесс:

  1. Rsync скопировать репозиторий с подмодулями на удаленный сервер
  2. на удаленном сервере, совершить скопированный репозиторий в хранилище резервного копирования мерзавца.

Ваш первый вариант, после копирования, удалить папку «.git» в каждом подмодуле. Это заставит git лечить как обычную папку. Я не рекомендую этот вариант из-за потери истории подмодуля.

Если я правильно вас понимаю, я думаю, вам следует прекратить использовать rsync и правильно использовать git.

Настройки удаленного репозитория Git для репозитория мерзавца, а также его подмодулей (см здесь: http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/)

затем в резервном вызове сценария

git push backup_server 
git submodule foreach --recursive git push backup_server 

После установки backup_server их соответствующего резервное копирование хранилища с использованием

git remote add backup_server https://backup_server_location/backup_repo.git 
0

Git сообщает о незавершенных изменениях в ваших подмодулях. Незафиксированный контент в home/user/dev/ruby/vid_downloader был добавлен, но еще не зафиксирован (он указан только в индексе, а не в привязке дерева); неподтвержденное содержание в двух других полностью не отслеживается.

Это связано с тем, что точка подмодуля заключается в том, что когда вы добавляете идентификатор зарегистрированной фиксации к вашему текущему индексу (а затем фиксируете его), вы можете позже воссоздать конкретную, зафиксированную среду сборки для вашего основного проекта проверяя, что конкретная фиксация из вложенного репо. Таким образом, статус git по умолчанию предупреждает вас о любом контенте в worktree субмодуля, который не будет точно воссоздан, проверяя его фиксацию в настоящий момент.

Если какие-либо конкретные неотслеживаемые файлы в ваших htdigest и node подмодулей не будут влиять позже восстановить или добавить их к подпроекту .gitignore или если вы не хотите их имен, совершенных его .gitignore с вы можете сделать список репо-местной имена, которые вам не нужны в его .git/info/exclude. См. gitignore docs.

Модифицированные (и отслеживаемые) файлы в vid_downloader работы дереве не обязательно проблема, но помните, что единственное, в главном проекте совершить это идентификатор фиксацию, который, как предполагается, извлечены из вложенного хранилища (это все подмодуль), но проверка его текущей фиксации не приведет к отслеживанию содержимого, которое есть сейчас. Это опасно в общем случае, и вы должны быть уверены, что это не проблема (может быть, это файл, который действительно не должен быть совершен, или вы провели тестирование с неизменным контентом и с тех пор перешли) ,


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

0

я всегда использую

git add --all . 

добавить все файлы

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