Git увидеть другие файлы, кроме моей файловой системы - PullRequest
1 голос
/ 19 сентября 2019

В Git Bash для Windows 10, когда я делаю:

$ ls -la
-rw-r--r-- 1 user 1049089   10 Jul 23 19:00 .gitignore
-rwxr-xr-x 1 user 1049089   28 Sep 19 15:47 a.sh*
-rwxr-xr-x 1 user 1049089   28 Sep 19 15:47 b.sh*

Я вижу, что оба a.sh и b.sh являются исполняемыми.Также я убедился, что запустив оба сценария - так что с моей точки зрения файловой системы оба этих файла являются исполняемыми.

Но когда я делаю:

$ git ls-tree HEAD
100644 blob c91cb20899da1dc6da1752f8b9cdc59e58e50873    a.sh
100755 blob c91cb20899da1dc6da1752f8b9cdc59e58e50873    b.sh

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

Я пытался: chmod +x a.sh, но git не подхватывает это и просто возвращает состояние, в котором ничего не говорится или ничего не было изменено.

Что происходит и как это исправить?

ОБНОВЛЕНИЕ:

Теперь у меня есть:

$ git config -l | grep core
core.symlinks=true
core.autocrlf=false
core.fscache=true
core.editor='C:\Program Files (x86)\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin
core.editor='C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -nosession
core.autocrlf=false
core.preloadindex=true
core.fscache=true
core.filemode=true

Это имеет смысл, поскольку я добавил core.filemode=true в C:\Users\user\.gitconfig:

...
[core]
    editor = 'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -nosession
    autocrlf = false
    preloadindex = true
    fscache = true
    fileMode = true
...

Но когда я клонирую новый репозиторий и снова запускаю его из внутри , репозиторий, который я получаю:

$ git clone ssh://git@host/my-repo.git
..
$ cd my-repo
$ git config -l | grep core
core.symlinks=true
core.autocrlf=false
core.fscache=true
core.editor='C:\Program Files (x86)\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin
core.editor='C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -nosession
core.autocrlf=false
core.preloadindex=true
core.fscache=true
core.filemode=true
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true

Теперь в нем перечислены две записи для core.filemode.Первый, я полагаю, взят из файла .gitconfig из моей пользовательской папки, а второй (установлен в false), похоже, приходит из файла my-repo/.git/config, который содержит:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]

Что определяет, что устанавливается вmy-repo/.git/config и почему установлено значение false?

На основании:

Git global core.fileMode false локально переопределяется на клоне

и:

Git игнорирует gitconfig?

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

1 Ответ

1 голос
/ 19 сентября 2019

Вы устанавливаете core.fileMode на true в Windows, чтобы git отслеживал бит выполнения

# tell git to keep/ignore filemode (chmod) as change,
git config core.fileMode true/false

core.fileMode
Сообщает Git, должен ли выполняться исполняемый бит файлов в рабочем дереве.
Значение по умолчанию - true (если в конфигурационном файле не указан core.filemode).


How to update executable bit? (как вы уже сделали)

# If you wish to set the executable bit use this command
git update-index --chmod=+x <file>

--chmod=(+|-)xУстановите права на выполнение для обновленных файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...