drz*_*aus 19 git workflow organization
使用Git,我想在我的项目中包含一些常见的JS/CSS库和/或实用程序方法(即来自另一个repo的特定文件),我希望它能让它们始终保持最新状态.我真的不想要整个远程存储库.如果我可以处理远程文件的"本地副本"并将更改重新推送,则可以获得奖励.
一个有点平行的例子:在ASP.NET中,我会通过引用("远程")其他库的.dll文件(没有"copy local")来做到这一点,这样每当我重新编译外部库时,我的项目就会指向最新的版本.
我的项目是...... MyProject,我只想要外部存储库ExternalLibrary和External2中的几个文件.我不想在其他地方克隆每个存储库,并将文件复制粘贴到我的存储库中.如果我做了改进MyProject/scripts/common1.js,我想把它推回到ExternalLibrary.
相关参考:
oni*_*ake 14
Git对于挑选远程项目中的选择文件没有任何支持.你可以用子树挑选出你想要的文件,然后找出一些重新获得它的策略,但这通常是复杂的,特别是如果你突然决定要比你最初选择的文件多一些.
我通常最终做的就是使用symlinks.这可以通过在项目中将项目添加为子模块,然后将文件符号链接到正确的位置来完成.
你的例子会是这样的:
$ git clone <url> myproject
$ cd myproject
$ git submodule add <url> external_library
$ git submodule add <url> external2
$ cd scripts
$ ln -s ../external_library/common1.js
$ ln -s ../external_library/plugin2.js
$ cd ../styles
$ ln -s ../external2/common.css
Run Code Online (Sandbox Code Playgroud)
要使符号链接在Windows中工作:
然后,在进行任何更改之前,我会创建一个新分支:
$ cd external_library
$ git checkout -b myproject
# make changes back in ../myproject
$ git commit <files> # in external_library
Run Code Online (Sandbox Code Playgroud)
然后,您可以将您的分支推送到github或其他内容,并向作者提交拉取请求,以便回复您的更改.
你可以保持这样的同步:
$ cd external_library
$ git checkout master
$ git pull
$ git checkout myproject
$ git merge master
Run Code Online (Sandbox Code Playgroud)
您还需要在子模块更改时更新父项目(例如git commit external_library).任何人使用你的项目都需要做一个git clone --recursive <url_to_myproject>.
注意:您可以在不为项目使用单独分支的情况下实现大部分此操作.使用对你最有意义的东西.
| 归档时间: |
|
| 查看次数: |
7057 次 |
| 最近记录: |