設定を追跡するために/(ルート)にGitリポジトリを作成しますか?


28

そのため、主に開発目的でGitを使用していますが、Ubuntuのインストールにある設定ファイルのバージョンを保存するためにGitを使用できることに気付きました。

私の提案するセットアップは次のとおりです。

  • git init でのレポ /

  • 追跡する特定の設定以外のファイルを無視する.gitignoreat /を追加します。

    たとえば、に.gitignoreは(source)を含めることができます。

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • これらの低レベル設定を変更するたびに、それらを追跡できます。

このセットアップで問題が発生する可能性のあるものはありますか?カーネルには常に/特定のフォルダーのみが必要ですか?アプリケーションの機能を台無しにしますか?


おそらく、~ファイルではなく、ホームディレクトリ設定ファイルを検討する必要があり/ます
マイケルデュラント

1
古いgrex SunOSパブリックサーバーには、すべてのrcファイルがあり、古いソース管理で他に何を知っているか(SCCSかRCSかはわかりませんが、CVSよりも確実に古いです)。これには問題はありません。
ジョシュア

@Mike Durrant:/etc/crontab私のラップトップのようなものは間違いなく私のものですが、私はあなたが何を意味するかわかります。
アビシェークDivekar

7
etckeeperバックアップを使用して作成します。
モニカの復職-M.シュレーダー

ただ、誤ってステージに/つまりは/ dev / sdaにコミットまたは類似しないように注意してください:D
ケツァルコアトル

回答:


37

両方の質問に対する答えは「いいえ」です/。必要なディレクトリを作成できます。起こりうる唯一のことは、私が推測するいくつかの空間的なパスに関する許可の問題です。

ただし、.gitディレクトリを別の場所に保存することをお勧めします。次のようになります。

git --git-dir=/home/user/backup-root --work-tree=/

こちらご覧ください


5
非常に興味深い、私は実際にあなたがgitでこれを行うことができることを知りませんでした!提案をありがとう。
アビシェークDivekar

これは、/ home / user btwの下にある設定ファイルのみを追跡できるのと同じ機能です。シェルエイリアスを追加すると、これが非常に便利になります。
ダニエルジュール

19

実際に、あなたはおそらくでバージョン管理の設定ファイルにしたい/etc/(ルートディレクトリのエントリを気にしない/ように、特に、ディレクトリ、procまたはusrまたはbin/インストールすることもできますので)etckeeperパッケージを

また、選択したサブディレクトリの一部をバージョン管理することもでき/usr/share/applications/ます(言及したような)。

ただし、Ubuntu パッケージ管理システムを混乱させないでください。おそらく、ほとんどの場合、インストールされているパッケージの現在のリストをバックアップする必要があります。


1
/usr/share/applications時々ファイルをいじってしまうので、実際にはファイルを気にします。
アビシェークDivekar

6

/にgitリポジトリがあると問題なく動作しますが、下位レベルのgitリポジトリに問題がある場合、それらすべてに回答するので気づきにくくなります。

注:「debsums」を使用すると作業量が少なくなり、おそらくより便利になります

sudo apt-get install debsums

これにより、バイナリまたは構成ファイルの(ほとんどの)変更をすばやく検出できます。

ここにインストールされたパッケージの例として、アップストリームパッケージとは異なるものがあります。

$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic

また、次のコマンドを使用して、変更された構成ファイルのリストを取得できます。

$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
 /etc/libvirt/libvirt.conf
 <snip>

クロムブラウザが不適切にパッケージ化され、パッケージファイルリストに存在しないファイルが存在することに注意してください。

/var/lib/dpkg/info/chromium-browser.list

これはdpkgデータを使用し、大きな/.gitディレクトリとワークフローを回避します。


「すべての問題に答えるので、問題のある下位レベルのgitリポジトリがあるときに気づきにくくすることを除いて」説明してもらえますか。もうちょっと?.gitignoreが少数のファイルのみを追跡する場合、どのように問題が発生するのか理解していません。
アビシェークDivekar

2
私はあなたが言うには、別のGitのレポを作成するときに@abhidivekar OPが言っていると信じて/home/$USER、その後.gitでは、/中レポのために与えられたすべてのgitのコマンドに対して答える/home$USERのではなく、その[のため.girにファイル] /home/$USER...
ジョージUdosen

ああ、なるほど。その場合は、別のフォルダに保管するだけでいいと思います。または/
アビシェークDivekar

1
@Georgeへのアクセス.gitツリー、あなただけでは上位ディレクトリをcdそれに、または持っていない、それのサブディレクトリ.gitのフォルダ(ある通常のディレクトリ)

2
@abhidivekar正しい、利益が問題を上回る場合でも問題ではありませんが、予期しない動作です。ブロッカーではなく、単なる警告です。
gdahlm

5

だから私は他の答えを模索しており、私に役立つ手順を見つけました:

  • 作り.gitignore/。これは、Gitがサブフォルダー内のホワイトリストファイルを処理する方法のため、思っていたよりもはるかに複雑でした。私はこれこのリンクを使って助けました。

    ## Source: /programming//a/29932318/4900327
    ## Comments are on new lines because trailing whitespace matters in Git (stackoverflow.com/a/8865858/4900327)
    
    # Blacklist all files, folders and subfolders in the same directory as the .gitignore file.
    /*
    # Do not blacklist the .gitignore file.
    !.gitignore
    
    # Now whitelist certain files.
    # For files in subfolders, some hoops must be jumped through (stackoverflow.com/a/16318111/4900327):
    
    ## Whitelisting files in /etc/ folder:
    # Whitelist the /etc/ folder (the git repo folder is whitelisted always)
    !/etc/
    # Blacklist all files in /etc/ folder.
    /etc/*
    # Whitelist specific file(s) in /etc/ folder.
    !/etc/crontab
    
    
    ## Whitelisting files in /etc/default/ folder:
    # /etc/ is already whitelisted, and its contents blacklisted.
    # Whitelist /etc/default/ folder.
    !/etc/default/
    # Blacklist all files in /etc/default/ folder.
    /etc/default/*
    # Whitelist specific file(s) in /etc/default/ folder.
    !/etc/default/tlp
    
    
    ## Whitelisting files in /home/USERNAME/ folder:
    # Whitelist /home/ folder.
    !/home/
    # Blacklist all files in /home/ folder.
    /home/*
    # Whitelist /home/USERNAME/ folder.
    !/home/USERNAME/
    # Blacklist all files in /home/USERNAME/ folder.
    /home/USERNAME/*
    # Whitelist specific file(s) in /home/USERNAME/ folder
    !/home/USERNAME/.bash_profile
    !/home/USERNAME/.bashrc
    
  • 移動し/て実行git init .これまでのところ、私は保存することができませんでした.git/使用して別のディレクトリにフォルダを@Ravexina言及リンクを

  • を実行git add .git statusます。Gitが追跡しているすべての設定ファイルのリストを取得する必要があります。

    If you used the above `.gitignore`, it should track `/etc/crontab`, `/etc/default/tlp`, `/home/USERNAME/.bash_profile`, and `/home/USERNAME/.bashrc`.
    
  • でコミットしgit commit -m "Initial settings files"ます。

  • git log -p -- path/to/fileまたはで変更を追跡できますgitk path/to/file。これに関する詳細はこちら


2

/etc/shadowgitリポジトリに機密事項(など)を保存する場合は、デフォルトではオブジェクトに権限が444あり、ディレクトリには権限があるため、すべてのユーザーが読み取れないようにする必要があり0755ます。の許可を変更.gitする 700か、それを入れることができます/root

もう1つの問題は、gitがファイルシステムのようなファイルアクセス許可を保存せず、拡張属性を保存しないことです。ファイルの場合、gitは実行可能かどうかのみを保存します。したがって、削除されたファイルを復元する場合、その所有者とグループはrootになり(rootとして実行する場合)、その許可は644またはになり755ます。所有者がルートではないサービスの構成ファイルでは問題になる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.