как заменить определенный шаблон во всех файлах [дубликат]

Судя по вашим комментариям к ответу @ SahibPrime, вам следует использовать etckeeper

С домашней страницы:

etckeeper is набор инструментов, позволяющих хранить / etc в репозитории git , mercurial , bazaar или darcs . Это позволяет использовать git для просмотра или отмены изменений, внесенных в / etc. Или даже отправьте репозиторий в другое место для резервного копирования или изменения конфигурации.

Он подключается к диспетчерам пакетов, таким как apt , для автоматической фиксации изменений, внесенных в / etc во время обновления пакетов. Он отслеживает метаданные файлов, которые git обычно не поддерживает, но это важно для / etc, например, разрешения для / etc / shadow.

Он достаточно модульный и настраиваемый, а также прост в использовании, если вы понимаете основы работы с контролем версий.

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

По крайней мере, в Debian он запускается ежедневно из cron, поэтому вам даже не нужно помнить о фиксации изменений.Он почти наверняка запускается из cron и в других дистрибутивах.

Установите его и полностью забудьте о нем, пока он вам не понадобится. Не требует обслуживания.

Вы также можете использовать git (или любое другое подобное программное обеспечение) для отслеживания изменений в / usr / local. Я использовал RCS годами в / etc и в таких каталогах, как / usr / local / {s,} bin / и ~ / bin. Позже я перешел на svn . etckeeper и git лучше.


tldr: gitmeoutofhere

Я, должно быть, перешел на etckeeper еще в 2012 году. У меня есть история изменений каждого изменения (по крайней мере, ежедневно и до / после каждой установки или обновления ) с тех пор.

# git log | tail -5 
commit 7e3bb0eade7ae9e211bb684be2e3c7d4a3128c24
Author: ...my.email.address.deleted...
Date:   Wed Feb 29 12:53:30 2012 +1100

    Initial commit

# git log | grep '^commit' | wc -l
1378

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

Вот некоторые вещи, которые я могу сделать со всей этой историей изменений моих файлов конфигурации:

Я могу видеть список коммитов для определенных файлов:

# git log apache2/apache2.conf | sed -ne 's/commit //p'  | head
2d0fabf90f2bc639d30bca925147fafd3fbd5e50
8022c7ca6dbe1661064604a646c52ca0d1f1b3ac
0620c88b8d1fd625f74f42059a4e8f056846df16
8c2fcfef72eca034b251654be44a268e92e39416
02329cf86655a2bb2c09c793b1d195a4de579cf1
5e449105f0ab75f9e903d8c75af5c8db6543c281
d8339212967af2c664b0c1776e9352f6c0e12ff8
7e3bb0eade7ae9e211bb684be2e3c7d4a3128c24

Я могу видеть, когда произошла какая-либо из этих фиксаций:

# git log 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac | head -5
commit 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac
Author: ...
Date:   Tue Aug 20 12:26:53 2013 +1000

    committing changes in /etc after apt run

и я могу увидеть разницу:

# git diff 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
diff --git a/apache2/apache2.conf b/apache2/apache2.conf
index baf6d8a..617152c 100644
--- a/apache2/apache2.conf
+++ b/apache2/apache2.conf
@@ -71,7 +71,7 @@
 #
 # The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
 #
-Mutex file:${APACHE_LOCK_DIR} default
+#Mutex file:${APACHE_LOCK_DIR} default

 #
 # PidFile: The file in which the server should record its process

И я могу вернуть все и / или все к любой предыдущей версии. Наиболее полезным является возврат отдельного файла:

# git checkout 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
# git diff 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
#

Я вижу список файлов, которые были изменены с момента последней фиксации:

# git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    modified:   apache2/apache2.conf

no changes added to commit (use "git add" and/or "git commit -a")

Если бы я хотел, я мог бы снова зафиксировать это (с помощью git add и git commit ) или передумал и вернул последний коммит:

# git checkout 2d0fabf90f2bc639d30bca925147fafd3fbd5e50 apache2/apache2.conf
# git help status
# 

-1
26.11.2014, 08:24
0 ответов

Теги

Похожие вопросы