2016-01-09 2 views
1

Я использую push для развертывания стратегии на серверах Linux.Как я могу динамически/автоматически добавлять файлы в git?

Отлично работает.

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

Что такое стратегия для этого.

Вот мой толчок, чтобы развернуть код в hooks/post-receive

#!/bin/sh 
git --work-tree=~/public_html --git-dir=~/root.git checkout -f 
echo "" 
echo "" 
echo "" 
echo "success-" 
echo "" 
echo "" 
echo "" 

Когда пользователь добавляет файл, он находится в public_html и никоим образом не отслеживаемых мерзавца.

Как это исправить?

+0

Возможно, вы захотите пересмотреть свой рабочий процесс. Обычно Git не используется для автоматически создаваемого контента. – PyRulez

ответ

1

Вы должны добавить и первый зафиксировать ваши пользовательские файлы в вашем крючке:

git --work-tree=~/public_html --git-dir=~/root.git add -- path/to/userfile 
git commit -m "add user file" 

Здесь , path/to/userfile - относительный путь относительно ~/public_html, который является корневой папкой рабочего дерева.

Тогда вы можете пойти дальше и проверка на все репо:

git -c 'core.bare=false' --work-tree=~/public_html --git-dir=~/root.git checkout -f 

-c 'core.bare=false' позволяет переопределить конфигурации core.bare голого репо, для того, чтобы позволить git add действовать, учитывая ~/public_html в качестве рабочего дерева.

Если параметр «-c» не работает (поскольку OP использует git 1.7.1 - выпущен в декабре 2010 года!), Попробуйте сначала (если обновление git не является вариантом), чтобы изменить настройку, а затем восстановить это:

git --git-dir=~/root.git config core.bare false 
git --work-tree=~/public_html --git-dir=~/root.git add -- path/to/userfile 
git --git-dir=~/root.git config core.bare true 

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

+0

Это не работает, git говорит мне ... 'fatal: не репозиторий git: '~/root.git' ' –

+0

@cadegalt да действительно: вы можете проверить голый репо, но вы не можете добавлять файлы, потому что нет * существующего * рабочего дерева, разрешенного с открытым репо (http://stackoverflow.com/a/7632497/6309). Попробуйте, хотя с помощью 'git -c 'core.bare = false' --work-tree = ~/public_html --git-dir = ~/root.git checkout -f' (http://stackoverflow.com/a/12548255/6309) – VonC

+0

@cadegalt Я имел в виду 'git -c 'core.bare = false' --work-tree = ~/public_html --git-dir = ~/root.git add-path/to/userfile' – VonC

0

Если вы хотите, чтобы добавить все файлы просто использовать:

# `git add -A` is equivalent to `git add . && git add -u`. 
git add -A 

Это добавит все ваши модифицирована + переименованы файлы в индекс, а затем вы можете совершить.

# on a single line it should be: 
git add . -A && git commit 

Эта команда добавит свои файлы, если они не находятся в вашем .gitignore или отмечены assume-unchanged флагом

+0

извините ... это не имеет значения ... Я использую push для развертывания и в этом методе ... Я нажимаю на голое репо и не проверяю рабочий каталог. –

+0

Итак, обновите свой вопрос соответственно, его неясно – CodeWizard

+0

'fatal: эта операция должна выполняться в дереве работ ... ... это сообщение, которое я получаю, когда я делаю это вручную. Однако я нахожусь в рабочем дереве, как определено моим крюком обновления сообщения, поэтому я не уверен, почему git противоречит самому себе. –

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