Git 与 本地 文件 夹 同步 - 同步 方式

tkqqtvp1  于 2022-11-20  发布在  Git
关注(0)|答案(3)|浏览(195)

有一个主Git仓库“MainRepo”
这里是新的存储库“NewRepo”
Newrepo使用“MainRepo”文件夹的确切文件/文件夹内容/结构,除了git文件夹。
因此,基本上,将内容复制到一个新文件夹,“git it”并将其推送到一个新的远程存储库。
现在它失去了与“NewRepo”的连接。
然而,我想继续在NewRepo上工作,但也要与OldRepo保持同步。
时不时地,OldRepo中的一些文件会发生变化,我想将这些小变化反映到NewRepo中。
我的想法是向NewRepo添加一个新的remote,目标是OldRepo url或OldRepo的本地存储库文件夹路径。
希望合并然后轰!
所有文件都显示为“冲突,”而不仅仅是已更改的3个文件。
这种合并甚至是可能的吗?我会想象这被命名为“交叉回购合并”。
或者这个动作是不是进入了同步文件夹的领域?而不是git合并。
帮帮我,我太爱git了,有时我的爱增加了我的期望太多,最终在这条路上无处可去。

q5iwbnjs

q5iwbnjs1#

问题 是 OldRepo 有 NewRepo 没有 共享 的 历史 记录 , 因此 即使 它们 有 相同 的 文件 内容 , 它们 也 被 视为 完全 不同 的 Repo 。 如果 通过 克隆 OldRepo 来 创建 NewRepo , 这 应该 可以 解决 。
听 起来 这 就是 你 想要 的 。

6uxekuva

6uxekuva2#

我有类似的情况,我使用rsync

我很好使用任何可以工作的工具,但是 all-git解决方案对我来说似乎有点大材小用--或者我只是对rsyncgit更 * 舒服 *。

更新“MainRepo”以匹配“NewRepo”的所需组件:

使用rsync
rsync [选项]源目标:
rsync使用这种方式,使Destination文件夹与Source文件夹同步。以下示例显示了重要的详细信息:

$ rsync -rptgovic --dry-run --delete --exclude=filepattern1 --exclude=filepattern2 NewRepo MainRepo

NewRepoMainRepo表示为文件夹规格;例如/home/$USER/somefoldername./somefoldername,具体取决于您的pwd
options由字符串ptgovidcC和其他指令rsync组成
请特别注意ptgovidcC中的i选项和--dry-run选项。这些选项一起使用,可以让您“练习运行”,以确保您的rsync命令选项执行您需要的操作。
--exclude=选项可以根据需要重复多次,以防止不需要的文件/文件夹进入MainRepo
在上述命令中,NewRepoMainRepo目标
当然,您应该***始终***咨询man rsync,以确保您的命令适合您的目标。

更新“NewRepo”以匹配“MainRepo”:

这基本上与上面的演练相同,但现在MainRepoNewRepo目标
options显然也需要改变,但i--dry-run选项将再次成为您的 “试验场”

解释i输出:

这并不像第一次看到它时看起来那么难,但这个“Map”将允许您解释rsync已采取的操作-或***要采取的***(当使用--dry-run时):

Understanding the output of rsync --itemize-changes

As you may know the rsync's --delete options if misused could make severe damage.

To prevent this you can use the --itemize-change and the --dry-run options to figure out how the command will behave before launching the real one.

The output will be something like that:

.d..t..g... ./
.f...p.g... Something.pdf
.f.....g... md5sum-2010-02-21.txt
.f...p.g... prova.rb
.d.....g... .metadata/
.f...p.g... .metadata/.lock
.f...p.g... .metadata/.log
.f...p.g... .metadata/version.ini
>f+++++++++ Parameter_Usage.txt

Where the first field of each line tell what rsync would do to each file.

I wrote this little schema that helped me to understand this output format and I'm publishing hoping it will be useful for others.

YXcstpoguax  path/to/file
|||||||||||
`----------- the type of update being done::
 ||||||||||   <: file is being transferred to the remote host (sent).
 ||||||||||   >: file is being transferred to the local host (received).
 ||||||||||   c: local change/creation for the item, such as:
 ||||||||||      - the creation of a directory
 ||||||||||      - the changing of a symlink,
 ||||||||||      - etc.
 ||||||||||   h: the item is a hard link to another item (requires --hard-links).
 ||||||||||   .: the item is not being updated (though it might have attributes that are being modified).
 ||||||||||   *: means that the rest of the itemized-output area contains a message (e.g. "deleting").
 ||||||||||
 `---------- the file type:
  |||||||||   f for a file,
  |||||||||   d for a directory,
  |||||||||   L for a symlink,
  |||||||||   D for a device,
  |||||||||   S for a special file (e.g. named sockets and fifos).
  |||||||||
  `--------- c: different checksum (for regular files)
   ||||||||     changed value (for symlink, device, and special file)
   `-------- s: Size is different
    `------- t: Modification time is different
     `------ p: Permission are different
      `----- o: Owner is different
       `---- g: Group is different
        `--- u: The u slot is reserved for future use.
         `-- a: The ACL information changed

此模式基于man rsync-i, --itemize-changes选项得内容,其组织方式便于引用ex 1 e0f1x.

rmbxnbpk

rmbxnbpk3#

在windows上,你可以使用robocopy将未跟踪文件夹中的更改“同步”到git分支文件夹中。
robocopy <Source Folder> <Destination Git Folder> /MIR /MT:8 /R:1 /W:1 /XD ".git" /XF ".gitignore" /l
如果您对在目标中复制和删除正确的文件感到满意,请删除/l参数。(/l列出操作,但不执行这些操作。)
然后使用git命令或git gui暂存并提交所需的更改。
https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

相关问题