Как пометить одну папку из репозитория git

Двойной ssh

Даже в сложном случае вы можете обрабатывать передачу файлов с помощью одной командной строки, просто с помощью ssh ;-) И это полезно, если remote1 не может подключиться к localhost:

ssh user1@remote1 'ssh user2@remote2 "cat file"' > file

tar

Но вы потеряете свойства файла (право собственности, разрешения ...).

Однако tar ваш друг сохранит эти свойства файла:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar c file"' | tar x

Вы также можете сжать, чтобы уменьшить пропускную способность сети:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj file"' | tar xj

И tar также позволяет переносить рекурсивный каталог через basic ssh:

ssh user1@remote1 'ssh user2@remote2 "cd path2; tar cj ."' | tar xj

ionice

Если файл огромен и вы не хотите беспокоить другие важные сетевые приложения, вы можете пропустить ограничение пропускной способности сети, предоставляемое scp и rsync (например, scp -l 1024 user@remote:file не использует более 1 Мбит / с).

Но обходной путь использует ionice , чтобы сохранить одиночная командная строка:

ionice -c2 -n7 ssh u1@remote1 'ionice -c2 -n7 ssh u2@remote2 "cat file"' > file

Примечание: ionice может быть недоступно в старых дистрибутивах.

0
задан Panagiotis Kanavos 5 March 2019 в 14:25
поделиться

1 ответ

Не уверен, почему ты этого хочешь, поэтому я просто дам несколько советов.

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

Скажите, что путь к папке в хранилище - ./foo. Вы можете запустить git ls-tree <commit> -- foo или git rev-parse <commit>:foo, чтобы увидеть хеш дерева foo. Вы можете пометить его как git tag <tagname> <tree_hash> или не зная его хеш git tag <tagname> <commit>:foo.

С помощью тега вы можете выдвигать или извлекать связанные объекты, или извлекать фактические файлы и подпапки, или манипулировать ими с помощью сантехнических команд.

Поскольку мы можем использовать <commit>:<path> для описания пути и содержимого папки, вам не нужно создавать дополнительный тег, если вы знаете коммит и путь.

0
ответ дан ElpieKay 5 March 2019 в 14:25
поделиться
Другие вопросы по тегам:

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