2016-04-04 29 views
2

を追加gitの第二の実行に戻ってそれらを追加します。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を行うことができます - gitのは通常どおり実行されますが、削除されたとしてシンボリックリンクフォルダ内のすべてのファイルがマークされると言うことになります。

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を再度実行すると、フォルダとすべてのファイルが正常に正常に追加されます。私はその後、ANOTHERgit 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 

私はグローバル設定で他には何もreleventを持っています。

私の全体的な質問は次のとおりです:gitはシンボリックリンクされたフォルダ内のファイルをすべての目的や目的のために通常のファイルとして扱うようにします。

編集:

私のユースケースがある私は、最新のコードでお互いに更新され、それらを保つために、局部的に2つ(またはそれ以上)のレポで使用されているモジュールを持っていることを、I両方のケースでいくつかのディレクトリをシンボリックリンクしました。これは、1つのリポジトリでそれを更新するたびに、他のいずれかで更新されます。

-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''' on Windows 10 –

答えて

0

私のバージョンのgitを最新バージョンに更新した後、シンボリックリンクされたフォルダをファイルにまったく追いかけることはできませんでした。

私は他人に見せるためにここに掲載しています。私は

私が思い付くことができのみソリューションgit version 2.8.1.windows.1を使用しています

ではなく、コマンドラインでMKLINK /Jを使用して接合にシンボリックリンクを有効にすることでした。

これは、フォルダをntfsジャンクションに変換しました.ntfsジャンクションは、gitがうまくいき、内部のファイルを通常のファイルとして扱います。

私は個人的にこれを簡単に行うために便利なLink Shell Extensionを使いました。

---より多くの情報が---

私は関係なく、何の、私はいくつかのリポジトリに含まれ、それらはお互いを更新持っていると思ったレポ外のファイルを持っていたので、これは、私のユースケースのために大丈夫ですプロジェクトの他の開発者がやっていました。

ではないこれらのファイルをリポジトリとは別に適切にバージョン管理したい場合は、解決策があります。そのためには、サブモジュールが答えになると思います。

あなたが別のディレクトリにシンボリックリンクそのものを追跡し、その後にgitをシンボリックリンクを使用したい場合は、ないファイルなので、プロジェクトの他の開発者は、これらのシンボリックリンク自体を追加する必要があります。

関連する問題